<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10portuguesefull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" gd:etag="W/&quot;DkYHQH45eCp7ImA9WxNWFk8.&quot;"><id>tag:blogger.com,1999:blog-1971543944217720435</id><updated>2009-10-15T13:28:51.020-03:00</updated><title>No Broken Window</title><subtitle type="html">O blog sem janelas quebradas (por enquanto)</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://nobrokenwindow.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://nobrokenwindow.blogspot.com/" /><link rel="hub" href="http://pubsubhubbub.appspot.com/" /><author><name>Rodrigo</name><uri>http://www.blogger.com/profile/15414819394415097763</uri><email>noreply@blogger.com</email></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>19</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><link rel="self" href="http://feeds.feedburner.com/nobrokenwindow" type="application/atom+xml" /><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2Fnobrokenwindow" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fnobrokenwindow" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Ffeeds.feedburner.com%2Fnobrokenwindow" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.bloglines.com/sub/http://feeds.feedburner.com/nobrokenwindow" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fnobrokenwindow" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fnobrokenwindow" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fnobrokenwindow" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><entry gd:etag="W/&quot;Ck4DSX4zeCp7ImA9WxVXFEg.&quot;"><id>tag:blogger.com,1999:blog-1971543944217720435.post-3794882244345809782</id><published>2009-02-12T13:00:00.001-02:00</published><updated>2009-02-12T13:02:58.080-02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-02-12T13:02:58.080-02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="agilidade" /><category scheme="http://www.blogger.com/atom/ns#" term="processos" /><category scheme="http://www.blogger.com/atom/ns#" term="scrum" /><title>SCRUM in Under 10 Minutes (HD)</title><content type="html">&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/Q5k7a9YEoUI&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;hl=pt-br&amp;amp;feature=player_embedded&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;embed src="http://www.youtube.com/v/Q5k7a9YEoUI&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;hl=pt-br&amp;amp;feature=player_embedded&amp;amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" height="344" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Mais um vídeo extraído do &lt;a href="http://blogdoabu.blogspot.com/"&gt;Blog do Abu&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1971543944217720435-3794882244345809782?l=nobrokenwindow.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=QqGXRhGmxzA:zCdmOHFSEA8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=QqGXRhGmxzA:zCdmOHFSEA8:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=QqGXRhGmxzA:zCdmOHFSEA8:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?i=QqGXRhGmxzA:zCdmOHFSEA8:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=QqGXRhGmxzA:zCdmOHFSEA8:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://nobrokenwindow.blogspot.com/feeds/3794882244345809782/comments/default" title="Postar comentários" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=1971543944217720435&amp;postID=3794882244345809782" title="0 Comentários" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1971543944217720435/posts/default/3794882244345809782?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1971543944217720435/posts/default/3794882244345809782?v=2" /><link rel="alternate" type="text/html" href="http://nobrokenwindow.blogspot.com/2009/02/scrum-in-under-10-minutes-hd.html" title="SCRUM in Under 10 Minutes (HD)" /><author><name>Rodrigo</name><uri>http://www.blogger.com/profile/15414819394415097763</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="02353817563116599199" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;DUcCR3o5eyp7ImA9WxVSGEk.&quot;"><id>tag:blogger.com,1999:blog-1971543944217720435.post-1950597943218880691</id><published>2009-01-13T09:24:00.008-02:00</published><updated>2009-01-13T09:44:26.423-02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-13T09:44:26.423-02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="frameworks" /><category scheme="http://www.blogger.com/atom/ns#" term="quick-post" /><title>Ninguém conhece Shoes</title><content type="html">Aos meus 18 leitores (incluindo eu), voltei!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://shoooes.net/"&gt;Shoes&lt;/a&gt; é um toolkit para desenvolvimento de aplicações GUI multi-plataforma em &lt;a href="http://www.ruby-lang.org/pt/"&gt;Ruby&lt;/a&gt;. &lt;a href="http://shoooes.net/about/"&gt;Saiba mais &lt;/a&gt;no site oficial, onde é possível fazer o download de um e-book free, aplicações e exemplos.&lt;br /&gt;&lt;br /&gt;Aqui vai um exemplo da facilidade do negócio. Este código&lt;br /&gt;&lt;pre&gt;&lt;code class="rb"&gt;&lt;/code&gt;&lt;blockquote&gt;&lt;span class="constant"&gt;Shoes&lt;/span&gt;.app &lt;span class="keywords"&gt;do&lt;/span&gt;&lt;br /&gt;background &lt;span class="string"&gt;"#F3F"&lt;/span&gt;..&lt;span class="string"&gt;"#F90"&lt;/span&gt;&lt;br /&gt;title &lt;span class="string"&gt;"Shoooes"&lt;/span&gt;, &lt;span class="symbol"&gt;:top&lt;/span&gt; =&gt; 60,&lt;br /&gt;&lt;span class="symbol"&gt;:align&lt;/span&gt; =&gt; &lt;span class="string"&gt;"center"&lt;/span&gt;,&lt;br /&gt;&lt;span class="symbol"&gt;:font&lt;/span&gt; =&gt; &lt;span class="string"&gt;"Trebuchet MS"&lt;/span&gt;,&lt;br /&gt;&lt;span class="symbol"&gt;:stroke&lt;/span&gt; =&gt; white&lt;br /&gt;&lt;span class="keywords"&gt;end&lt;/span&gt;&lt;/blockquote&gt;&lt;/pre&gt;renderiza&lt;br /&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_5zxY-DmU9a8/SWx9l7qubEI/AAAAAAAAACc/mRFJrN7trPE/s1600-h/tut-app11.png"&gt;&lt;img style="border: 0; cursor: pointer; width: 320px; height: 266px;" src="http://4.bp.blogspot.com/_5zxY-DmU9a8/SWx9l7qubEI/AAAAAAAAACc/mRFJrN7trPE/s320/tut-app11.png" alt="" id="BLOGGER_PHOTO_ID_5290741752879017026" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;Muito bom!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1971543944217720435-1950597943218880691?l=nobrokenwindow.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=-t-pdA9HmxU:IPb5X1zCbiI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=-t-pdA9HmxU:IPb5X1zCbiI:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=-t-pdA9HmxU:IPb5X1zCbiI:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?i=-t-pdA9HmxU:IPb5X1zCbiI:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=-t-pdA9HmxU:IPb5X1zCbiI:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://nobrokenwindow.blogspot.com/feeds/1950597943218880691/comments/default" title="Postar comentários" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=1971543944217720435&amp;postID=1950597943218880691" title="0 Comentários" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1971543944217720435/posts/default/1950597943218880691?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1971543944217720435/posts/default/1950597943218880691?v=2" /><link rel="alternate" type="text/html" href="http://nobrokenwindow.blogspot.com/2009/01/ningum-conhece-shoes.html" title="Ninguém conhece Shoes" /><author><name>Rodrigo</name><uri>http://www.blogger.com/profile/15414819394415097763</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="02353817563116599199" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_5zxY-DmU9a8/SWx9l7qubEI/AAAAAAAAACc/mRFJrN7trPE/s72-c/tut-app11.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;D0cNRng9eip7ImA9WxRWE0U.&quot;"><id>tag:blogger.com,1999:blog-1971543944217720435.post-8036029396868640926</id><published>2008-10-30T14:41:00.002-02:00</published><updated>2008-10-30T14:44:57.662-02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-10-30T14:44:57.662-02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="firefox" /><category scheme="http://www.blogger.com/atom/ns#" term="gambiarras" /><title>Diminuindo o consumo de memória do Firefox</title><content type="html">É simples:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;abra o Firefox&lt;/li&gt;&lt;li&gt;digite na barra de endereços &lt;span style="font-style: italic;"&gt;about:config&lt;/span&gt;&lt;/li&gt;&lt;li&gt;clique com o botão direito do mouse em algum canto da tela&lt;/li&gt;&lt;li&gt;escolha a opção nova/boolean&lt;/li&gt;&lt;li&gt;abrirá uma caixa de dialogo&lt;/li&gt;&lt;li&gt;digite no nome: &lt;span style="font-weight: bold;"&gt;config.trim_on_minimize&lt;/span&gt;&lt;/li&gt;&lt;li&gt;coloque a opção como &lt;span style="font-style: italic;"&gt;true&lt;/span&gt;&lt;/li&gt;&lt;li&gt;reinicie o Firefox&lt;/li&gt;&lt;/ul&gt;fonte: &lt;a href="http://www.estudiolivre.org/tiki-view_blog_post.php?postId=885"&gt;http://www.estudiolivre.org/tiki-view_blog_post.php?postId=885&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;Pra mim até que melhorou um pouco...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1971543944217720435-8036029396868640926?l=nobrokenwindow.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=lyDegRi4p4s:ys05Qa-EX7s:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=lyDegRi4p4s:ys05Qa-EX7s:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=lyDegRi4p4s:ys05Qa-EX7s:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?i=lyDegRi4p4s:ys05Qa-EX7s:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=lyDegRi4p4s:ys05Qa-EX7s:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://nobrokenwindow.blogspot.com/feeds/8036029396868640926/comments/default" title="Postar comentários" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=1971543944217720435&amp;postID=8036029396868640926" title="0 Comentários" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1971543944217720435/posts/default/8036029396868640926?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1971543944217720435/posts/default/8036029396868640926?v=2" /><link rel="alternate" type="text/html" href="http://nobrokenwindow.blogspot.com/2008/10/diminuindo-o-consumo-de-memria-do.html" title="Diminuindo o consumo de memória do Firefox" /><author><name>Rodrigo</name><uri>http://www.blogger.com/profile/15414819394415097763</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="02353817563116599199" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;DU4CSX48fCp7ImA9WxRXFUs.&quot;"><id>tag:blogger.com,1999:blog-1971543944217720435.post-777573375395426228</id><published>2008-10-21T00:00:00.002-02:00</published><updated>2008-10-21T03:46:08.074-02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-10-21T03:46:08.074-02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><category scheme="http://www.blogger.com/atom/ns#" term="agilidade" /><title>Utilizando macros no VIM</title><content type="html">Este post não será muita novidade pro pessoal "old school", que está bem acostumado com o &lt;a href="http://pt.wikipedia.org/wiki/Vi"&gt;VI&lt;/a&gt; ou o &lt;a href="http://pt.wikipedia.org/wiki/Vim"&gt;VIM&lt;/a&gt;. Como este não é meu caso (sim, sou da geração "click"), recentemente &lt;strike&gt;fui obrigado&lt;/strike&gt; comecei a utilizar mais o VIM e descobri algumas funcionalidades realmente úteis para nós desenvolvedores, neste caso a gravação de teclas (macros), que facilita muito o processamento de textos formatados, scripts, etc.&lt;br /&gt;&lt;br /&gt;Neste exeplo vou mostrar uma manipulação de um script SQL que faz o insert com os valores do &lt;span style="font-style: italic;"&gt;id&lt;/span&gt;, &lt;span style="font-style: italic;"&gt;nome&lt;/span&gt; e &lt;span style="font-style: italic;"&gt;telefone&lt;/span&gt; numa tabela &lt;span style="font-style: italic;"&gt;cliente&lt;/span&gt;. O &lt;strike&gt;ir&lt;/strike&gt;responsável pela modelagem da tabela não respeitou as n regras formais de normalização, então o DBA resolveu remodelar a tabela, desmembrando em duas: uma para armazenar as informações do cliente e outra para armazenar seus telefones.&lt;br /&gt;&lt;br /&gt;Desta forma, precisarei fazer a transformação do script de&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;insert into cliente (id, nome, telefone) values (1, 'Cliente1', 123456);&lt;br /&gt;insert into cliente (id, nome, telefone) values (2, 'Cliente2', 234567);&lt;br /&gt;.&lt;br /&gt;.&lt;br /&gt;.&lt;br /&gt;insert into cliente (id, nome, telefone) values (10, 'Cliente10', 987654);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;para algo parecido com&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;insert into cliente (id, nome) values (1, 'Cliente1');&lt;br /&gt;insert into cliente_fone values (1, 123456);&lt;br /&gt;&lt;br /&gt;insert into cliente (id, nome) values (2, 'Cliente2');&lt;br /&gt;insert into cliente_fone values (2, 234567);&lt;br /&gt;.&lt;br /&gt;.&lt;br /&gt;.&lt;br /&gt;&lt;br /&gt;insert into cliente (id, nome) values (10, 'Cliente10');&lt;br /&gt;insert into cliente_fone values (10, 987654);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Como você deve ter percebido, para manipular este script manualmente seria necessário duplicar cada linha, alterar a linha original removendo o número do telefone e alterar a linha copiada adicionando removendo o nome do cliente e mudando o nome da tabela. Para automatizar esta tarefa no VIM ou GVIM, executarei os seguintes comandos:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;qq - Inicia a gravação no registrador "q"&lt;br /&gt;yy - Copia a linha atual&lt;br /&gt;p - Cola a linha copiada abaixo da linha atual&lt;br /&gt;k - Posiciona o cursor na linha de cima&lt;br /&gt;/) - Posiciona o cursor no parêntese antes de "values"&lt;br /&gt;d, - Apaga a palavra "telefone" até a vírgula&lt;br /&gt;/); - Posiciona o cursor no último parêntese&lt;br /&gt;d, - Apaga a última palavra até a vírgula (o número do telefone)&lt;br /&gt;j - Move o cursor para a linha de baixo&lt;br /&gt;0 - Posiciona o cursor no início da linha&lt;br /&gt;:s/cliente/cliente_fone - Substitui "cliente" por "cliente_fone", o nome da table&lt;br /&gt;/nome - Posiciona o cursor em "nome"&lt;br /&gt;dW - Apaga a palavra "nome"&lt;br /&gt;/( - Posiciona no próximo parêntese&lt;br /&gt;W -Posiciona na próxima palavar&lt;br /&gt;dW - Apaga a palavra inteira, no caso "'Cliente1',"&lt;br /&gt;j - Finalmente, posiciona o cursor na próxima linha, para completar o looping&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Um registrador foi gravado na letra "q". Agora basta posicionar o cursor no início do arquivo e digitar "@q" para executar a sequência gravada. Para rodar várias vezes, digite o número de loopings seguido pelo registrador, por exemplo "10@q".&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_5zxY-DmU9a8/SP1rLhij7CI/AAAAAAAAACM/XZyFTGUtjzY/s1600-h/vim.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_5zxY-DmU9a8/SP1rLhij7CI/AAAAAAAAACM/XZyFTGUtjzY/s320/vim.png" alt="" id="BLOGGER_PHOTO_ID_5259477785564671010" border="0" /&gt;&lt;/a&gt;&lt;/pre&gt;&lt;br /&gt;Referências&lt;br /&gt;&lt;a href="http://aurelio.net/curso/material/vim-ref.html"&gt;http://aurelio.net/curso/material/vim-ref.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.primeirospassos.org/sessao3_4.html"&gt;http://www.primeirospassos.org/sessao3_4.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Até o próximo post!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1971543944217720435-777573375395426228?l=nobrokenwindow.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=opy8-CgXPiE:2E1P0TVt6-M:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=opy8-CgXPiE:2E1P0TVt6-M:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=opy8-CgXPiE:2E1P0TVt6-M:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?i=opy8-CgXPiE:2E1P0TVt6-M:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=opy8-CgXPiE:2E1P0TVt6-M:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://nobrokenwindow.blogspot.com/feeds/777573375395426228/comments/default" title="Postar comentários" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=1971543944217720435&amp;postID=777573375395426228" title="0 Comentários" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1971543944217720435/posts/default/777573375395426228?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1971543944217720435/posts/default/777573375395426228?v=2" /><link rel="alternate" type="text/html" href="http://nobrokenwindow.blogspot.com/2008/10/utilizando-macros-no-vim.html" title="Utilizando macros no VIM" /><author><name>Rodrigo</name><uri>http://www.blogger.com/profile/15414819394415097763</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="02353817563116599199" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_5zxY-DmU9a8/SP1rLhij7CI/AAAAAAAAACM/XZyFTGUtjzY/s72-c/vim.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;CkYBRnc7eyp7ImA9WxRQEEs.&quot;"><id>tag:blogger.com,1999:blog-1971543944217720435.post-5649632053104572684</id><published>2008-10-03T15:54:00.001-03:00</published><updated>2008-10-03T15:55:57.903-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-10-03T15:55:57.903-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="waterfall" /><category scheme="http://www.blogger.com/atom/ns#" term="off-topic" /><title>O waterfall está entre nós!</title><content type="html">O modelo cascata ainda é total ou parcialmente utilizado na maioria dos ramos corporativos, mas em nenhum outro ramo ele fica tão evidente como no bancário. A seguir, segue um relato de como estes "processos" agilizam nossa vida e como, no final das contas, são sempre os "peões" que resolvem as coisas.&lt;br /&gt;&lt;br /&gt;Meu pacote de serviços incluí um serviço de courier (moto-boy), então resolvi usá-lo. Como não sabia exatamente como solicitar o serviço, liguei para minha agência. Depois ouvir as opções do atendimento, digitei a opção que parecia ser exatamente o que queria, mas a ligação foi encaminhada para um atendente inicial. Então expliquei o que queria e fui encaminhado para um nível superior de atendimento. Alguns segundos se passaram e a pessoa que me atendeu quis inicialmente conferir se o serviço estava disponível no meu pacote de serviços. Confirmei novamente minha conta e o atendente confirmou o serviço, mas me explicou que deveria solicitá-lo através do "atendimento telefonico".&lt;br /&gt;&lt;br /&gt;Pois bem, telefonei para o "atendimento telefonico". Novamente escutei as opções disponíveis, digitei uma opção, mais uma e finalmente outra. Até que uma gravação solicitou meus dados bancários e uma senha para o atendimento telefônico (que senha???). No final da mensagem informou uma opção para o caso de eu não possuir a tal senha para atendimento telefonico. Digitei a opção e segui os procedimentos.&lt;br /&gt;&lt;br /&gt;Depois de informar todos os meus dados bancários, minha senha, o número do meu cartão de crédito e confirmar alguns dados pessoais, a tal senha foi soletrada pelo atendente eletrônico. Com posse dessa senha, desliguei e telefonei novamente para o mesmo atendimento. Digitei algumas opções, a tal senha (que é uma senha exclusiva para o atendimento telefonico obtida a partir da minha senha bancária), e a ligação chegou a um &lt;strike&gt;vegetal&lt;/strike&gt; ser humano. Perguntei sobre o serviço de courier mas o atendende nada sabia. Por isso, encaminhou para outro atendente, que encaminhou para outro, que solicitou novamente meus dados bancários (aqueles mesmo que informei quando telefonei para o serviço). Depois de verificar novamente meu pacote de serviços, disse que encaminharia para o "departamento responsável".&lt;br /&gt;&lt;br /&gt;Neste ponto preciso transcrever o dialogo:&lt;br /&gt;Atendente: Bom dia, em que posso ajudar?&lt;br /&gt;Eu: Gostaria de solicitar o serviço bla bla bla...&lt;br /&gt;A: Qual seria a finalidade?&lt;br /&gt;Eu: (explico a finalidade num nível macro, pois estava de bom humor aquele dia)&lt;br /&gt;At: Então mano, vou te falar a real: hoje não dá não... tá muita correria aqui.&lt;br /&gt;[silêncio por alguns segundos]&lt;br /&gt;Eu: Como assim não dá?&lt;br /&gt;At: É que eu to sozinho aqui hoje, tá mó correria e não posso sair... só pra amanhã hein...&lt;br /&gt;Eu: Amanhã pela manhã?&lt;br /&gt;At: Não, só de tarde. Isso se o senhor ligar na parte de manhã que eu deixo avisado pros caras aqui...&lt;br /&gt;[mais alguns segundos de silêncio]&lt;br /&gt;Eu: Não precisa. Obrigado por nada!&lt;br /&gt;&lt;br /&gt;Com certeza você que está lendo isso já passou por uma situação parecida, não é mesmo? Pois é, são os frutos do waterfall e de uma geração que ainda vive no século XIX em pleno 2008. Sem comentários...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1971543944217720435-5649632053104572684?l=nobrokenwindow.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=PZqSOxi0E4s:IDYB64i43fA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=PZqSOxi0E4s:IDYB64i43fA:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=PZqSOxi0E4s:IDYB64i43fA:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?i=PZqSOxi0E4s:IDYB64i43fA:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=PZqSOxi0E4s:IDYB64i43fA:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://nobrokenwindow.blogspot.com/feeds/5649632053104572684/comments/default" title="Postar comentários" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=1971543944217720435&amp;postID=5649632053104572684" title="0 Comentários" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1971543944217720435/posts/default/5649632053104572684?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1971543944217720435/posts/default/5649632053104572684?v=2" /><link rel="alternate" type="text/html" href="http://nobrokenwindow.blogspot.com/2008/10/o-waterfall-est-entre-ns.html" title="O waterfall está entre nós!" /><author><name>Rodrigo</name><uri>http://www.blogger.com/profile/15414819394415097763</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="02353817563116599199" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;CUcNQnYzfCp7ImA9WxRRFks.&quot;"><id>tag:blogger.com,1999:blog-1971543944217720435.post-5924808030802131869</id><published>2008-09-28T15:00:00.000-03:00</published><updated>2008-09-29T01:38:13.884-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-09-29T01:38:13.884-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="desenvolvimento" /><category scheme="http://www.blogger.com/atom/ns#" term="videos" /><category scheme="http://www.blogger.com/atom/ns#" term="agilidade" /><title>Abrace um desenvolvedor</title><content type="html">&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/1lqxORnQARw&amp;amp;hl=pt-br&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;embed src="http://www.youtube.com/v/1lqxORnQARw&amp;amp;hl=pt-br&amp;amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" height="344" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Seguem as traduções &lt;strike&gt;via Google Translate&lt;/strike&gt;:&lt;br /&gt;&lt;br /&gt;Estamos no 4º mês de uma agenda de 5 meses e eu só recebi os requisitos ontem (e eles mudaram denovo!).&lt;br /&gt;&lt;br /&gt;Eu gasto metade do meu dia em reuniões sobre como obter mais trabalho realizado (em vez de trabalhar).&lt;br /&gt;&lt;br /&gt;Meu chefe leu &lt;strike&gt;na INFO&lt;/strike&gt; em uma revista que os desenvolvedores usando a linguagem de programação "_____" são duas vezes mais produtivos, então ele nos comprou uma cópia e cortou nosso calendário pela metade.&lt;br /&gt;&lt;br /&gt;Todos os dias o meu chefe muda de idéia sobre o que nós estamos construindo/programando.&lt;br /&gt;&lt;br /&gt;As pessoas continuam me pedindo para consertar seus seus e-mails, por isso não tenho tempo para codificar.&lt;br /&gt;&lt;br /&gt;Meu pai não tem mais tempo para mim.&lt;br /&gt;&lt;br /&gt;Alguns consultores disseram para meu chefe que eles poderiam construir nossa próxima versão na metade do tempo, por metade do dinheiro. Ele acreditou neles e agora eles gastaram todo o orçamento e utilizaram todo o tempo...&lt;br /&gt;...mas continuam pela metade. Agora eles se foram e seus códigos são um desastre. Nós temos que corrigir e terminar o que eles começaram.&lt;br /&gt;&lt;br /&gt;Abrace um desenvolvedor hoje.&lt;br /&gt;&lt;br /&gt;Acabei de terminar um curso intensivo de 6 semanas de Visual Basic 6.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Tem mais essa campanha da Thoughtworks:&lt;br /&gt;&lt;br /&gt;&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/LYlhCGng5Mk&amp;amp;hl=pt-br&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;embed src="http://www.youtube.com/v/LYlhCGng5Mk&amp;amp;hl=pt-br&amp;amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" height="344" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Pois é, triste realidade!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1971543944217720435-5924808030802131869?l=nobrokenwindow.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=u5He3dpK7GQ:IZqP3eKUr14:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=u5He3dpK7GQ:IZqP3eKUr14:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=u5He3dpK7GQ:IZqP3eKUr14:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?i=u5He3dpK7GQ:IZqP3eKUr14:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=u5He3dpK7GQ:IZqP3eKUr14:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://nobrokenwindow.blogspot.com/feeds/5924808030802131869/comments/default" title="Postar comentários" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=1971543944217720435&amp;postID=5924808030802131869" title="0 Comentários" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1971543944217720435/posts/default/5924808030802131869?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1971543944217720435/posts/default/5924808030802131869?v=2" /><link rel="alternate" type="text/html" href="http://nobrokenwindow.blogspot.com/2008/09/abrace-um-desenvolvedor.html" title="Abrace um desenvolvedor" /><author><name>Rodrigo</name><uri>http://www.blogger.com/profile/15414819394415097763</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="02353817563116599199" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;A0YHSXw6fyp7ImA9WxRTGEw.&quot;"><id>tag:blogger.com,1999:blog-1971543944217720435.post-3475351871289866083</id><published>2008-09-04T12:08:00.002-03:00</published><updated>2008-09-07T17:25:38.217-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-09-07T17:25:38.217-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="agilidade" /><category scheme="http://www.blogger.com/atom/ns#" term="processos" /><title>Vídeo: diferença entre Agile e Waterfall</title><content type="html">Em poucas palavras...&lt;br /&gt;&lt;br /&gt;&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/FV_9DTJMFZs&amp;amp;rel=0&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;hl=en&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;embed src="http://www.youtube.com/v/FV_9DTJMFZs&amp;amp;rel=0&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;hl=en&amp;amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" height="344" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Vi no &lt;a href="http://amagno.blogspot.com/"&gt;blog do Alexandre Magno&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1971543944217720435-3475351871289866083?l=nobrokenwindow.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=suh_UR6eQTE:6acfe5xKucE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=suh_UR6eQTE:6acfe5xKucE:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=suh_UR6eQTE:6acfe5xKucE:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?i=suh_UR6eQTE:6acfe5xKucE:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=suh_UR6eQTE:6acfe5xKucE:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://nobrokenwindow.blogspot.com/feeds/3475351871289866083/comments/default" title="Postar comentários" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=1971543944217720435&amp;postID=3475351871289866083" title="0 Comentários" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1971543944217720435/posts/default/3475351871289866083?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1971543944217720435/posts/default/3475351871289866083?v=2" /><link rel="alternate" type="text/html" href="http://nobrokenwindow.blogspot.com/2008/09/vdeo-diferena-entre-agile-e-waterfall.html" title="Vídeo: diferença entre Agile e Waterfall" /><author><name>Rodrigo</name><uri>http://www.blogger.com/profile/15414819394415097763</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="02353817563116599199" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;A08HSXY9fyp7ImA9WxdaEk0.&quot;"><id>tag:blogger.com,1999:blog-1971543944217720435.post-2551309139849062190</id><published>2008-08-20T00:57:00.005-03:00</published><updated>2008-08-20T02:23:58.867-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-08-20T02:23:58.867-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="desenvolvimento" /><title>Aquela janela quebrada</title><content type="html">A fim de obter o mínimo de qualidade e profissionalismo no desenvolvimento de sistemas e sites, seguem algumas dicas que podem evitar janelas quebradas como esta:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_5zxY-DmU9a8/SKuXN9mycrI/AAAAAAAAAB0/NLIfRckcjyE/s1600-h/asp-net-e-uma-merda-mesmo"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_5zxY-DmU9a8/SKuXN9mycrI/AAAAAAAAAB0/NLIfRckcjyE/s320/asp-net-e-uma-merda-mesmo" alt="" id="BLOGGER_PHOTO_ID_5236445257879679666" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Adicione uma página de erros default para a aplicação. Lembre-se que a configuração do ambiente de produção deve ser diferente pois o usuário não precisa receber dados de debug na cara. Nunca se esqueça de fazer testes (automatizados, de preferência) antes de distribuir uma aplicação em produção. E se mesmo assim der algum problema, tenha em mãos um mecanismo de logging eficiente que, por exemplo, envie um email para o administrador da aplicação quando um bug crítico impedir que um usuário acesse o site e efetue uma compra, ou seja, uma falha que dê prejuízo e má imagem para a empresa.&lt;br /&gt;&lt;br /&gt;Pense bem antes de "reformular" o site da sua empresa apenas para torná-lo mais "bonitinho" aproveitando para utilizar aquela "tecnologia da moda". Talvez um site não muito "atraente", construido com aquela tecnologia "ultrapassada", mas que funciona e gera lucros para a empresa seja uma forma de evitar janelas quebradas.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1971543944217720435-2551309139849062190?l=nobrokenwindow.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=f2kxP6EhBXI:TJav0EFmMPI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=f2kxP6EhBXI:TJav0EFmMPI:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=f2kxP6EhBXI:TJav0EFmMPI:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?i=f2kxP6EhBXI:TJav0EFmMPI:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=f2kxP6EhBXI:TJav0EFmMPI:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://nobrokenwindow.blogspot.com/feeds/2551309139849062190/comments/default" title="Postar comentários" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=1971543944217720435&amp;postID=2551309139849062190" title="0 Comentários" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1971543944217720435/posts/default/2551309139849062190?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1971543944217720435/posts/default/2551309139849062190?v=2" /><link rel="alternate" type="text/html" href="http://nobrokenwindow.blogspot.com/2008/08/aquela-janela-quebrada.html" title="Aquela janela quebrada" /><author><name>Rodrigo</name><uri>http://www.blogger.com/profile/15414819394415097763</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="02353817563116599199" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_5zxY-DmU9a8/SKuXN9mycrI/AAAAAAAAAB0/NLIfRckcjyE/s72-c/asp-net-e-uma-merda-mesmo" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;DUIMR38-eSp7ImA9WxdUGEg.&quot;"><id>tag:blogger.com,1999:blog-1971543944217720435.post-5421292237315767067</id><published>2008-08-04T10:36:00.002-03:00</published><updated>2008-08-04T10:46:26.151-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-08-04T10:46:26.151-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu" /><title>Desativar foco automático no Ubuntu</title><content type="html">Este é um post de utilidade pública. Quantas vezes você estava digitando algo em uma caixa de texto ou janela e então outra janela ganha o foco "automaticamente", aí você se perde ou &lt;strike&gt;apaga&lt;/strike&gt; digita algo que não queria no lugar errado?&lt;br /&gt;&lt;br /&gt;Pois então, este é um "recurso" padrão do &lt;a href="http://pt.wikipedia.org/wiki/Compiz"&gt;Compiz&lt;/a&gt; e pode ser desativado, agora que você já sabe do que se trata (eu demorei pra descobrir isso).&lt;br /&gt;&lt;br /&gt;No gerenciador do &lt;a href="http://compiz.org/"&gt;Compiz&lt;/a&gt;, clique em "General Options", acesse a aba "Focus &amp;amp; Raise Behavior" e desmarque a opção "Auto raise". Pronto!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://janio.sarmento.org/wp-content/uploads/2008/05/compiz-settings.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px;" src="http://janio.sarmento.org/wp-content/uploads/2008/05/compiz-settings.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Fonte: &lt;a href="http://janio.sarmento.org/ubuntu-e-o-caso-do-roubo-de-foco/"&gt;http://janio.sarmento.org/ubuntu-e-o-caso-do-roubo-de-foco/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1971543944217720435-5421292237315767067?l=nobrokenwindow.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=BGowGpiEIV0:HgsUHZ5wDPQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=BGowGpiEIV0:HgsUHZ5wDPQ:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=BGowGpiEIV0:HgsUHZ5wDPQ:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?i=BGowGpiEIV0:HgsUHZ5wDPQ:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=BGowGpiEIV0:HgsUHZ5wDPQ:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://nobrokenwindow.blogspot.com/feeds/5421292237315767067/comments/default" title="Postar comentários" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=1971543944217720435&amp;postID=5421292237315767067" title="0 Comentários" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1971543944217720435/posts/default/5421292237315767067?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1971543944217720435/posts/default/5421292237315767067?v=2" /><link rel="alternate" type="text/html" href="http://nobrokenwindow.blogspot.com/2008/08/desativar-foco-automtico-no-ubuntu.html" title="Desativar foco automático no Ubuntu" /><author><name>Rodrigo</name><uri>http://www.blogger.com/profile/15414819394415097763</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="02353817563116599199" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;CEINSX0zeyp7ImA9WxdVGE8.&quot;"><id>tag:blogger.com,1999:blog-1971543944217720435.post-4096321824518609310</id><published>2008-07-23T10:57:00.003-03:00</published><updated>2008-07-23T11:16:38.383-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-07-23T11:16:38.383-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="IDE" /><category scheme="http://www.blogger.com/atom/ns#" term="eclipse" /><title>Novidades do Eclipse Ganymede</title><content type="html">A nova versão do Eclipse, um pacotão de &lt;a href="http://www.eclipse.org/ganymede/learn.php"&gt;vários projetos&lt;/a&gt; da fundação, foi &lt;a href="http://www.eclipse.org/org/press-release/20080625_ganymede.php"&gt;lançada oficialmente&lt;/a&gt; no dia 25 de Junho de 2008 com a versão 3.4 e codinome &lt;a href="http://www.eclipse.org/ganymede/"&gt;Ganymede&lt;/a&gt;, que é o nome de uma lua de Saturno.&lt;br /&gt;&lt;br /&gt;Além de alguns bugfixes, a nova versão conta com várias melhorias principalmente no editor. As que eu mais gostei foram:&lt;ul&gt;&lt;li&gt;Novas caixas de debug, onde é possível obter informações de um objeto passando o mouse sobre ele em modo debug:&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://zvikico.typepad.com/.a/6a00d83548421753ef00e5536c47088833-350wi"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px;" src="http://zvikico.typepad.com/.a/6a00d83548421753ef00e5536c47088833-350wi" alt="" border="0" /&gt;&lt;/a&gt;&lt;ul&gt;&lt;li&gt;Drag and Drop no Outline, sendo possível organizar o código apenas arrastando os métodos:&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://zvikico.typepad.com/.a/6a00d83548421753ef00e5536c4b1c8833-350wi"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px;" src="http://zvikico.typepad.com/.a/6a00d83548421753ef00e5536c4b1c8833-350wi" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Uma &lt;a href="http://eclipse.dzone.com/articles/eclipse-34-hidden-treasures"&gt;lista mais detalhada&lt;/a&gt; dos novos recursos pode ser vista &lt;a href="http://eclipse.dzone.com/articles/eclipse-34-hidden-treasures"&gt;aqui&lt;/a&gt;. &lt;a href="http://www.eclipse.org/downloads/packages/"&gt;Baixe a nova versão&lt;/a&gt; e divirta-se!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1971543944217720435-4096321824518609310?l=nobrokenwindow.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=WHKGl3kZ3Hc:ymh3Cvy2Yg0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=WHKGl3kZ3Hc:ymh3Cvy2Yg0:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=WHKGl3kZ3Hc:ymh3Cvy2Yg0:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?i=WHKGl3kZ3Hc:ymh3Cvy2Yg0:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=WHKGl3kZ3Hc:ymh3Cvy2Yg0:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://nobrokenwindow.blogspot.com/feeds/4096321824518609310/comments/default" title="Postar comentários" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=1971543944217720435&amp;postID=4096321824518609310" title="0 Comentários" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1971543944217720435/posts/default/4096321824518609310?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1971543944217720435/posts/default/4096321824518609310?v=2" /><link rel="alternate" type="text/html" href="http://nobrokenwindow.blogspot.com/2008/07/novidades-do-eclipse-ganymede.html" title="Novidades do Eclipse Ganymede" /><author><name>Rodrigo</name><uri>http://www.blogger.com/profile/15414819394415097763</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="02353817563116599199" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;CUIDR34_eip7ImA9WxdVEEs.&quot;"><id>tag:blogger.com,1999:blog-1971543944217720435.post-2776292409827173084</id><published>2008-07-14T15:55:00.005-03:00</published><updated>2008-07-14T16:26:16.042-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-07-14T16:26:16.042-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="virtualização" /><category scheme="http://www.blogger.com/atom/ns#" term="virtualbox" /><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu" /><title>Modo Seamless no VirtualBox</title><content type="html">Para quem ainda não conhece, o &lt;a href="http://www.virtualbox.org/"&gt;Virtual Box&lt;/a&gt; é uma solução de &lt;a href="http://pt.wikipedia.org/wiki/M%C3%A1quina_virtual"&gt;virtualização&lt;/a&gt; open-source profissional e leve que pode "emular" uma máquina virtual em diversas plataformas sem deixar nada devendo para &lt;a href="http://www.vmware.com/"&gt;outras soluções famosas do mercado&lt;/a&gt;. Utilizo o &lt;a href="http://pt.wikipedia.org/wiki/VirtualBox"&gt;Virtual Box&lt;/a&gt; em casa e no trabalho, pois como desenvolvedor web preciso me assegurar que o site que estou desenvolvendo funcione corretamente em outros ambientes como Windows e seu Internet Explorer, etc.&lt;br /&gt;&lt;br /&gt;Quem tiver interesse em conhecer e testar o VirualBox, &lt;a href="http://www.tecnoclasta.com/2008/07/03/virtualbox-windowsxp-e-ubuntu-juntos-guia-de-instalacao/"&gt;este artigo&lt;/a&gt; ensina passo a passo a &lt;a href="http://www.tecnoclasta.com/2008/07/03/virtualbox-windowsxp-e-ubuntu-juntos-guia-de-instalacao/"&gt;instalação e configuração no Ubuntu&lt;/a&gt;. Se for utilizar uma máquina virtual com Windows, &lt;a href="http://rafaelrjp.wordpress.com/2007/12/07/compartilhar-pasta-entre-o-virtual-box-windowsxp-e-o-ubuntu/"&gt;este outro artigo&lt;/a&gt; explica como compartilhar os arquivos do Windows com o Ubuntu, passo a passo.&lt;br /&gt;&lt;br /&gt;Agora falando do assunto principal deste post, uma das coisas que achei muito legal no Virtual Box é o modo "seamless", onde é possível "integrar" o ambiente da VM com o ambiente nativo do hospedeiro. Para resumir a explicação, veja na imagem como ficou meu desktop rodando uma VM do WindowsXP dentro do Ubuntu:&lt;span style="text-decoration: underline;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_5zxY-DmU9a8/SHuoIc5s3XI/AAAAAAAAABs/Uga6_nILU7Q/s1600-h/Captura_da_tela.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_5zxY-DmU9a8/SHuoIc5s3XI/AAAAAAAAABs/Uga6_nILU7Q/s320/Captura_da_tela.png" alt="" id="BLOGGER_PHOTO_ID_5222953056016850290" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Para ativar este recurso, basta acessar o menu "Máquina" e clicar em Modo Seamless. O VirtualBox exibirá uma mensagem informando que a VM rodará em tela cheia e após confirmação, seu desktop é integrado automagicamente.&lt;br /&gt;&lt;br /&gt;Espero que aproveitem a dica. Comentem!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1971543944217720435-2776292409827173084?l=nobrokenwindow.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=H61jGumttjA:2Sx2OFH9olA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=H61jGumttjA:2Sx2OFH9olA:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=H61jGumttjA:2Sx2OFH9olA:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?i=H61jGumttjA:2Sx2OFH9olA:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=H61jGumttjA:2Sx2OFH9olA:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://nobrokenwindow.blogspot.com/feeds/2776292409827173084/comments/default" title="Postar comentários" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=1971543944217720435&amp;postID=2776292409827173084" title="2 Comentários" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1971543944217720435/posts/default/2776292409827173084?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1971543944217720435/posts/default/2776292409827173084?v=2" /><link rel="alternate" type="text/html" href="http://nobrokenwindow.blogspot.com/2008/07/modo-seamless-no-virtualbox.html" title="Modo Seamless no VirtualBox" /><author><name>Rodrigo</name><uri>http://www.blogger.com/profile/15414819394415097763</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="02353817563116599199" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_5zxY-DmU9a8/SHuoIc5s3XI/AAAAAAAAABs/Uga6_nILU7Q/s72-c/Captura_da_tela.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total></entry><entry gd:etag="W/&quot;CU4CRn47eCp7ImA9WxdWFU8.&quot;"><id>tag:blogger.com,1999:blog-1971543944217720435.post-6737940981412146956</id><published>2008-07-08T10:14:00.004-03:00</published><updated>2008-07-08T10:32:47.000-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-07-08T10:32:47.000-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="navegadores" /><category scheme="http://www.blogger.com/atom/ns#" term="web" /><title>Save the developers!</title><content type="html">Já faz algum tempo que aderi a esta campanha, mas depois que o Miguel postou sobre no &lt;a href="http://1up4dev.wordpress.com/2008/07/06/pensando-na-gente-desenvolvedores/"&gt;1up4developers&lt;/a&gt; resolvi divulgar mais.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_5zxY-DmU9a8/SHNqyiJrgFI/AAAAAAAAABc/6ZN3gMKbqWo/s1600-h/logo.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_5zxY-DmU9a8/SHNqyiJrgFI/AAAAAAAAABc/6ZN3gMKbqWo/s320/logo.gif" alt="" id="BLOGGER_PHOTO_ID_5220633809445945426" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Trata-se de uma campanha para que as pessoas&lt;a href="http://getfirefox.com/"&gt; atualizem seus navegadores web&lt;/a&gt; em prol dos desenvolvedores. Quem está nessa área de desenvolvimento web sabe como é terrível desenvolver um site e depois ter que "adequá-lo" às restrições de &lt;a href="http://www.microsoft.com/windows/ie/ie6/downloads/default.mspx"&gt;alguns navegadores&lt;/a&gt; (o da empresa do tio Bill, por exemplo), que não suportam a maioria dos padrões que todos os outros navegadores implementam.&lt;br /&gt;&lt;br /&gt;Então, a fim de &lt;strike&gt;forçar&lt;/strike&gt; incentivar a migração para navegadores de verdade, você que é desenvolvedor, pare de se preocupar com a "compatibilidade" dos navegadores retardatários e disponibilize um belo &lt;a href="http://www.savethedevelopers.org/"&gt;link para o site da campanha&lt;/a&gt;. Assim, as pessoas não vão poder reclamar que "não apareceu aquele style", ou que "aquela tabela não ficou alinhada", entre muitas outras coisas.&lt;br /&gt;&lt;br /&gt;Participe: basta fazer o &lt;a href="http://getfirefox.com/"&gt;download&lt;/a&gt; de graça de um dos populares navegadores de verdade e pronto!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1971543944217720435-6737940981412146956?l=nobrokenwindow.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=4oOcWdQUmQI:ju9bUbNFsgw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=4oOcWdQUmQI:ju9bUbNFsgw:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=4oOcWdQUmQI:ju9bUbNFsgw:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?i=4oOcWdQUmQI:ju9bUbNFsgw:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=4oOcWdQUmQI:ju9bUbNFsgw:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://nobrokenwindow.blogspot.com/feeds/6737940981412146956/comments/default" title="Postar comentários" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=1971543944217720435&amp;postID=6737940981412146956" title="0 Comentários" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1971543944217720435/posts/default/6737940981412146956?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1971543944217720435/posts/default/6737940981412146956?v=2" /><link rel="alternate" type="text/html" href="http://nobrokenwindow.blogspot.com/2008/07/save-developers.html" title="Save the developers!" /><author><name>Rodrigo</name><uri>http://www.blogger.com/profile/15414819394415097763</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="02353817563116599199" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_5zxY-DmU9a8/SHNqyiJrgFI/AAAAAAAAABc/6ZN3gMKbqWo/s72-c/logo.gif" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;CEQDSX49eSp7ImA9WxdWFU8.&quot;"><id>tag:blogger.com,1999:blog-1971543944217720435.post-3541353359968672985</id><published>2008-07-07T12:59:00.003-03:00</published><updated>2008-07-08T10:06:18.061-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-07-08T10:06:18.061-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="certificação" /><category scheme="http://www.blogger.com/atom/ns#" term="scwcd" /><title>Impressões sobre o SCWCD</title><content type="html">Na semana passada consegui fazer minha certificação SCWCD (&lt;a href="http://www.sun.com/training/certification/java/scwcd.xml"&gt;Sun Certified Web Component Developer&lt;/a&gt;) com aproveitamento de 82% estudando apenas com o livro &lt;a href="http://www.temporeal.com.br/produtos.php?id=170042"&gt;Use a Cabeça: JSP e Servlets&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Por mais que a gente conheça de web, JSP, servlets, e etc, o livro (e o exame) aprofundam muito os conhecimentos em Listeners, Filtros, Taglibs, Patterns e outras coisas. O único ponto negativo, na minha opnião, é a quantidade de coisas que é preciso decorar! Nome de métodos, interfaces, qual método é de qual interface, implementações e principalmente XML! Essa é a pior parte: tem muito XML no exame. Quem quiser tirar essa certificação já vai se preparado: tem muito XML!&lt;br /&gt;&lt;br /&gt;Tirando isso, a prova foi bem tranquila. Encontrei várias perguntas que me fizeram pensar um pouco pra responder, principalmente para questões envolvendo Patterns JEE.&lt;br /&gt;&lt;br /&gt;Quem tiver interesse em fazer essa certificação, um bom começo é o livro que citei. Faça um resumo de todas as interfaces, implementações, xml, etc e estude um pouco. &lt;a href="http://www.jdiscuss.com/"&gt;Esse site&lt;/a&gt; também tem uns simulados (na faixa) bem legais pra treinar.&lt;br /&gt;&lt;br /&gt;Até o próximo post.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1971543944217720435-3541353359968672985?l=nobrokenwindow.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=NLBIvKBMd_w:dtr4zFIwdFU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=NLBIvKBMd_w:dtr4zFIwdFU:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=NLBIvKBMd_w:dtr4zFIwdFU:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?i=NLBIvKBMd_w:dtr4zFIwdFU:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=NLBIvKBMd_w:dtr4zFIwdFU:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://nobrokenwindow.blogspot.com/feeds/3541353359968672985/comments/default" title="Postar comentários" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=1971543944217720435&amp;postID=3541353359968672985" title="0 Comentários" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1971543944217720435/posts/default/3541353359968672985?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1971543944217720435/posts/default/3541353359968672985?v=2" /><link rel="alternate" type="text/html" href="http://nobrokenwindow.blogspot.com/2008/07/impresses-sobre-o-scwcd.html" title="Impressões sobre o SCWCD" /><author><name>Rodrigo</name><uri>http://www.blogger.com/profile/15414819394415097763</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="02353817563116599199" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;D0MBRH8ycSp7ImA9WxdXFUQ.&quot;"><id>tag:blogger.com,1999:blog-1971543944217720435.post-9042356099423726734</id><published>2008-06-27T16:01:00.001-03:00</published><updated>2008-06-27T16:37:35.199-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-06-27T16:37:35.199-03:00</app:edited><title>Sobre o blog</title><content type="html">No Broken Window!&lt;br /&gt;&lt;br /&gt;Diz a lenda que, há alguns anos, fizeram o seguinte experimento em Nova York. Estacionaram um carro em um bairro perigoso e o deixaram lá durante uma semana. Após esse período, ele ainda estava lá, inteiro. Então, os pesquisadores jogaram uma pedra no vidro do carro e foram embora. Não precisaram nem esperar uma semana. No dia seguinte o carro já estava completamente depenado e destruído. Uma única janela quebrada foi suficiente para iniciar o processo de vandalismo.&lt;br /&gt;&lt;br /&gt;David Thomas e Andrew Hunt tratam desse assunto no livro The Pragmatic Programmer. Eles mostram como a cidade de Nova York usou a Teoria das Janelas Quebradas para reduzir a violência e como nós, desenvolvedores, podemos usá-la para evitar que o design de nossas aplicações se degradem. Resumidamente, a idéia é que um código permanentemente bem escrito, tenderá a ser mantido assim, pois as pessoas ficam "sem graça" de estragá-lo. Por outro lado, um código que já tem várias gambiarras é um convite para outras novas.&lt;br /&gt;&lt;br /&gt;Referências:&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Broken_window_theory"&gt;http://en.wikipedia.org/wiki/Broken_window_theory&lt;/a&gt;&lt;br /&gt;&lt;a href="http://blog.improveit.com.br/articles/2007/01/05/nada-de-janelas-quebradas"&gt;http://blog.improveit.com.br/articles/2007/01/05/nada-de-janelas-quebradas&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.artima.com/intv/fixit.html"&gt;http://www.artima.com/intv/fixit.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1971543944217720435-9042356099423726734?l=nobrokenwindow.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=9WUlguU-Xy4:32j7xsFhyuk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=9WUlguU-Xy4:32j7xsFhyuk:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=9WUlguU-Xy4:32j7xsFhyuk:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?i=9WUlguU-Xy4:32j7xsFhyuk:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=9WUlguU-Xy4:32j7xsFhyuk:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://nobrokenwindow.blogspot.com/feeds/9042356099423726734/comments/default" title="Postar comentários" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=1971543944217720435&amp;postID=9042356099423726734" title="0 Comentários" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1971543944217720435/posts/default/9042356099423726734?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1971543944217720435/posts/default/9042356099423726734?v=2" /><link rel="alternate" type="text/html" href="http://nobrokenwindow.blogspot.com/2008/06/sobre-o-blog.html" title="Sobre o blog" /><author><name>Rodrigo</name><uri>http://www.blogger.com/profile/15414819394415097763</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="02353817563116599199" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;DUMESX89fyp7ImA9WxdXFkw.&quot;"><id>tag:blogger.com,1999:blog-1971543944217720435.post-902804977366868430</id><published>2008-05-07T00:00:00.003-03:00</published><updated>2008-06-27T22:43:28.167-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-06-27T22:43:28.167-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="frameworks" /><category scheme="http://www.blogger.com/atom/ns#" term="jquery" /><title>Simplifique JavaScript com jQuery</title><content type="html">&lt;div class="main"&gt;   &lt;div class="snap_preview"&gt;&lt;p&gt;&lt;strong&gt;O que é jQuery?&lt;/strong&gt;&lt;br /&gt;O &lt;a href="http://en.wikipedia.org/wiki/Jquery" target="_blank"&gt;jQuery&lt;/a&gt; é uma biblioteca &lt;a href="http://en.wikipedia.org/wiki/JavaScript_library" target="_blank"&gt;JavaScript&lt;/a&gt; focada na interação entre elementos HTML de uma página fornecendo padronização e vários outros recursos úteis no desenvolvimento de sites. O apelo principal do jQuery é “faça mais, escreva menos”. Com poucas linhas de código é possível interar nos elementos &lt;a href="http://en.wikipedia.org/wiki/Document_Object_Model" target="_blank"&gt;DOM&lt;/a&gt; (identificação, edição, inserção, deleção, manipular eventos javascript, alterar regras CSS, aplicar efeitos visuais (fade in/out, drag’n'drop, slides, movimentos, etc), fazer requisições &lt;a href="http://pt.wikipedia.org/wiki/AJAX_%28programa%C3%A7%C3%A3o%29" target="_blank"&gt;AJAX&lt;/a&gt;, etc.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Principais recursos&lt;/strong&gt;&lt;/p&gt; &lt;ul&gt;&lt;li&gt;Seleção de elementos DOM por id, classe, nome, atributo, expressão…&lt;/li&gt;&lt;li&gt;Modificação de elementos DOM, incluindo styles&lt;/li&gt;&lt;li&gt;Suporte para eventos&lt;/li&gt;&lt;li&gt;Manipulação de CSS&lt;/li&gt;&lt;li&gt;Efeitos e animações&lt;/li&gt;&lt;li&gt;Requisições AJAX com XML e &lt;a href="http://pt.wikipedia.org/wiki/JSON" target="_blank"&gt;jSON&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Extensível (é possível adicionar componentes de terceiros como bibliotecas de UI)&lt;/li&gt;&lt;li&gt;Utilitários como versão do navegador, iteradores, etc.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;Muito bonito hein… mas por que eu deveria usar jQuery?&lt;/strong&gt;&lt;/p&gt; &lt;ul&gt;&lt;li&gt;Comunidade brasileira crescente e documentação em português: &lt;a href="http://jquerybrasil.com/" target="_blank"&gt;jquerybrasil.com&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://pt.wikipedia.org/wiki/Cross-browser" target="_blank"&gt;CrossBrowser&lt;/a&gt; (funciona em todos os navegadores, até mesmo no IE)&lt;/li&gt;&lt;li&gt;Desenvolvida por especialista no assunto.&lt;/li&gt;&lt;li&gt;Desenvolvimento mais fluente e padronizado do &lt;a href="http://en.wikipedia.org/wiki/JavaScript" target="_blank"&gt;JavaScript&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;Colocando a mão na massa&lt;/strong&gt;&lt;br /&gt;O primeiro passo para utilizar a biblioteca jQuery no seu site é baixar a última versão do jquery.js no site &lt;a href="http://jquery.com/" target="_blank"&gt;oficial&lt;/a&gt;. Clique &lt;a href="http://docs.jquery.com/Downloading_jQuery#Current_Release" target="_blank"&gt;aqui&lt;/a&gt; para baixar. Em seguida, referencie o script no header de sua página. Por exemplo:&lt;/p&gt; &lt;pre&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;   &amp;lt;script type="text/javascript" src="jquery.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;/pre&gt;&lt;p&gt;Agora, basta utilizar a sintaxe do jQuery para escrever seus códigos. Veja como fica o Helloworld:&lt;/p&gt; &lt;pre&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;    &amp;lt;script type="text/javascript" src="jquery.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;    &amp;lt;script type="text/javascript"&amp;gt;    &lt;br /&gt;            $(document).ready(function() {&lt;br /&gt;                    $("#link_helloworld").click(function(){&lt;br /&gt;                        alert("Olá mundo!");&lt;br /&gt;                    });&lt;br /&gt;            });&lt;br /&gt;    &amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;    &amp;lt;a id="link_helloworld" href="#"&amp;gt;Clique!&amp;lt;/a&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Explicação&lt;/strong&gt;&lt;br /&gt;O script está adicionando um "click" ao elemento "link_helloworld" do documento. O $(document).ready() seleciona o "document" e executa a function quando ele estiver completamente carregado. Dentro desta function, é selecionado o elemento pelo id através de $("#link_helloworld") e, através do método click, adicionado a function onde está o alert. A primeira vista pode parecer confuso, mas lendo a documentação oficial e fazendo alguns exemplos vai ficar mais claro.&lt;/p&gt; &lt;p&gt;Espero que aproveitem a dica. Bons estudos!&lt;/p&gt; &lt;/div&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1971543944217720435-902804977366868430?l=nobrokenwindow.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=bNP0shwXLW4:K734hOc9C9U:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=bNP0shwXLW4:K734hOc9C9U:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=bNP0shwXLW4:K734hOc9C9U:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?i=bNP0shwXLW4:K734hOc9C9U:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=bNP0shwXLW4:K734hOc9C9U:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://nobrokenwindow.blogspot.com/feeds/902804977366868430/comments/default" title="Postar comentários" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=1971543944217720435&amp;postID=902804977366868430" title="0 Comentários" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1971543944217720435/posts/default/902804977366868430?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1971543944217720435/posts/default/902804977366868430?v=2" /><link rel="alternate" type="text/html" href="http://nobrokenwindow.blogspot.com/2008/05/simplifique-javascript-com-jquery.html" title="Simplifique JavaScript com jQuery" /><author><name>Rodrigo</name><uri>http://www.blogger.com/profile/15414819394415097763</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="02353817563116599199" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;DE8ARX0-eSp7ImA9WxdXFkw.&quot;"><id>tag:blogger.com,1999:blog-1971543944217720435.post-1226804254943553606</id><published>2008-04-12T00:00:00.002-03:00</published><updated>2008-06-27T22:34:04.351-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-06-27T22:34:04.351-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="frameworks" /><category scheme="http://www.blogger.com/atom/ns#" term="spring" /><category scheme="http://www.blogger.com/atom/ns#" term="jsf" /><title>Integrando JSF com Spring</title><content type="html">&lt;div class="main"&gt;   &lt;div class="snap_preview"&gt;&lt;p&gt;Para quem não conhece, o &lt;a href="http://www.springframework.org/" target="_blank"&gt;Spring&lt;/a&gt; é um framework open-source não intrusivo baseado nos padrões de projeto &lt;a href="http://pt.wikipedia.org/wiki/Invers%C3%A3o_de_controle" target="_blank"&gt;Inversão de Controle (IoC)&lt;/a&gt; e &lt;a href="http://pt.wikipedia.org/wiki/Inje%C3%A7%C3%A3o_de_depend%C3%AAncia" target="_blank"&gt;Injeção de Dependência (DI)&lt;/a&gt;. O Spring possuí muitos outros recursos além do IoC e DI como &lt;a href="http://static.springframework.org/spring/docs/2.5.x/reference/mvc.html" target="_blank"&gt;MVC&lt;/a&gt;, &lt;a href="http://static.springframework.org/spring/docs/2.5.x/reference/remoting.html#remoting-web-services" target="_blank"&gt;WebServices&lt;/a&gt; e &lt;a href="http://static.springframework.org/spring/docs/2.5.x/reference/aop.html" target="_blank"&gt;Orientação a Aspectos (AOP)&lt;/a&gt;. Muita gente o acha “pesado” e desnecessário, mas em alguns casos, como uma aplicação de pequeno porte, o Spring pode ser realmente útil pois não necessita de um ambiente robusto (um Container EJB, por exemplo), podendo rodar num Container Web como Tomcat.&lt;br /&gt;&lt;strong&gt;Integrando o que?&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;O objetivo da integração é fazer com que os “beans” de contexto do Spring possam ser “injetados” nas propriedades dos ManagedBeans do JSF. Partindo do ponto que sua aplicação JSF e o contexto do Spring estão corretamente configurados, basta modificar o arquivo faces-config.xml adicionando:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;&amp;lt;faces-config&amp;gt;&lt;br /&gt;      &amp;lt;application&amp;gt;&lt;br /&gt;              &amp;lt;variable-resolver&amp;gt;&lt;br /&gt;                      org.springframework.web.jsf.SpringBeanVariableResolver&lt;br /&gt;              &amp;lt;/variable-resolver&amp;gt;&lt;br /&gt;      &amp;lt;/application&amp;gt;&lt;br /&gt;&amp;lt;/faces-config&amp;gt;&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;Fazendo isso voce está obrigando o JSF a utilizar o VariableResolver especifíco do Spring, que primeiro faz uma busca pelos objetos do seu contexto e depois delega para o “resolver” padrão do JSF continuar buscando suas varáveis (por exemplo, os ManagedBeans).&lt;/p&gt; &lt;p&gt;Agora, basta adicionar a propriedade a ser injetada na declaração do seu ManagedBean:&lt;/p&gt; &lt;pre&gt;&amp;lt;managed-bean&amp;gt;&lt;br /&gt;      &amp;lt;managed-bean-name&amp;gt;clienteController&amp;lt;/managed-bean-name&amp;gt;&lt;br /&gt;      &amp;lt;managed-bean-class&amp;gt;&lt;br /&gt;              jsfexample.web.ClienteController&lt;br /&gt;      &amp;lt;/managed-bean-class&amp;gt;&lt;br /&gt;      &amp;lt;managed-bean-scope&amp;gt;session&amp;lt;/managed-bean-scope&amp;gt;&lt;br /&gt;      &amp;lt;managed-property&amp;gt;&lt;br /&gt;              &amp;lt;property-name&amp;gt;cliente&amp;lt;/property-name&amp;gt;&lt;br /&gt;              &amp;lt;value&amp;gt;#{clienteBean}&amp;lt;/value&amp;gt;&lt;br /&gt;      &amp;lt;/managed-property&amp;gt;&lt;br /&gt;&amp;lt;/managed-bean&amp;gt;&lt;/pre&gt; &lt;p&gt;Pronto, quando o JSF carregar o ManagedBean “clienteController”, vai tentar “resolver” a variável “clienteBean” e injetá-la na propriedade “cliente” utilizando o “VariableResolver” do Spring. Agora, basta acessar o ManagedBean normalmente do seu JSP ou Facelet:&lt;/p&gt; &lt;pre&gt;&amp;lt;f:view&amp;gt;&lt;br /&gt;      &amp;lt;h:outputText value="#{clienteController.cliente.nome}" /&amp;gt;&lt;br /&gt;      &amp;lt;h:outputText value="#{clienteController.cliente.idade}" /&amp;gt;&lt;br /&gt;&amp;lt;/f:view&amp;gt;&lt;/pre&gt; &lt;p&gt;Esta é a maneira mais básica de injetar os beans do Spring nos ManagedBeans do JSF. Para mais informações, consulte a &lt;a href="http://static.springframework.org/spring/docs/2.5.x/reference/web-integration.html#jsf-delegatingvariableresolver" target="_blank"&gt;documentação&lt;/a&gt; oficial do Spring. Também existem &lt;a href="http://jsf-spring.sourceforge.net/index.shtml" target="_blank"&gt;outras&lt;/a&gt; &lt;a href="http://opensource.atlassian.com/confluence/spring/display/JSF/Home" target="_blank"&gt;propostas&lt;/a&gt; dessa integração.&lt;/p&gt; &lt;p&gt;Dúvidas, críticas ou sugestões, basta enviar seu comentário.&lt;/p&gt; &lt;/div&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1971543944217720435-1226804254943553606?l=nobrokenwindow.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=4gzPWwp30h8:WiqobRA6qmk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=4gzPWwp30h8:WiqobRA6qmk:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=4gzPWwp30h8:WiqobRA6qmk:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?i=4gzPWwp30h8:WiqobRA6qmk:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=4gzPWwp30h8:WiqobRA6qmk:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://nobrokenwindow.blogspot.com/feeds/1226804254943553606/comments/default" title="Postar comentários" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=1971543944217720435&amp;postID=1226804254943553606" title="1 Comentários" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1971543944217720435/posts/default/1226804254943553606?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1971543944217720435/posts/default/1226804254943553606?v=2" /><link rel="alternate" type="text/html" href="http://nobrokenwindow.blogspot.com/2008/04/integrando-jsf-com-spring.html" title="Integrando JSF com Spring" /><author><name>Rodrigo</name><uri>http://www.blogger.com/profile/15414819394415097763</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="02353817563116599199" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total></entry><entry gd:etag="W/&quot;DE4CQH88eCp7ImA9WxdXFkw.&quot;"><id>tag:blogger.com,1999:blog-1971543944217720435.post-2154143803184110712</id><published>2008-04-10T00:00:00.001-03:00</published><updated>2008-06-27T22:36:01.170-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-06-27T22:36:01.170-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="testes unitários" /><category scheme="http://www.blogger.com/atom/ns#" term="tdd" /><category scheme="http://www.blogger.com/atom/ns#" term="junit" /><title>Testes parametrizados com jUnit 4</title><content type="html">&lt;div class="main"&gt;   &lt;div class="snap_preview"&gt;&lt;p&gt;Ontem assisti a uma palestra do Jorge Diz sobre &lt;a href="http://www.junit.org/" target="_blank"&gt;JUnit&lt;/a&gt; e &lt;a href="http://pt.wikipedia.org/wiki/Teste_unitario" target="_blank"&gt;Testes de Software&lt;/a&gt; na &lt;a href="http://globalcode.com.br/" target="_blank"&gt;GlobalCode&lt;/a&gt;. Foram apresentadas as características de um &lt;a href="http://www.javafree.org/dependencias/tutoriais/testes_junit.pdf" target="_blank"&gt;Teste Unitário&lt;/a&gt;, um how-to sobre &lt;a href="http://en.wikipedia.org/wiki/Test-driven_development" target="_blank"&gt;Test-Driven Development&lt;/a&gt; e o foco principal foi JUnit 4.4.&lt;/p&gt; &lt;p&gt;O JUnit 4 está mais flexível e fluente. As vantagens principais são:&lt;/p&gt; &lt;ul&gt;&lt;li&gt;Utilização de Annotations para marcar as classes e métodos de testes;&lt;/li&gt;&lt;li&gt;A classe de teste não precisa estender TestCase;&lt;/li&gt;&lt;li&gt;Possibilidade de criar suítes de testes;&lt;/li&gt;&lt;li&gt;API fluente utilizando &lt;a href="http://code.google.com/p/hamcrest/wiki/Tutorial" target="_blank"&gt;Hamcrest&lt;/a&gt;;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;O que mais chamou minha atenção foram os testes Parametrizados, onde é possível definir vários parâmetros para rodar o teste.&lt;/p&gt; &lt;p&gt;Veja um exemplo com o teste de uma classe Calculadora:&lt;/p&gt; &lt;pre&gt;@RunWith(Parameterized.class)&lt;br /&gt;public class CalculadoraTeste {&lt;br /&gt;&lt;br /&gt;        private int numA, numB, esperado;&lt;br /&gt;        &lt;br /&gt;        public CalculadoraTeste(int numA, int numB, int esperado) {&lt;br /&gt;                this.numA = numA;&lt;br /&gt;                this.numB = numB;&lt;br /&gt;                this.esperado = esperado;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        @Parameters &lt;br /&gt;        public static LinkedList parametros() {&lt;br /&gt;                LinkedList params = new LinkedList();&lt;br /&gt;                params.add(new Integer[] { 1, 3, 4 });&lt;br /&gt;                params.add(new Integer[] { 1, 1, 2 });&lt;br /&gt;                params.add(new Integer[] { 0, 0, 0 });&lt;br /&gt;                params.add(new Integer[] { 5, -1, 4 });&lt;br /&gt;                return params;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        @Test   &lt;br /&gt;        public void umMetodoParaTestarSoma() {&lt;br /&gt;&lt;br /&gt;                Calculadora calc = new Calculadora();&lt;br /&gt;                int obtido = calc.somar(this.numA, this.numB);&lt;br /&gt;&lt;br /&gt;                //utilizando a API fluente do Hamcrest...&lt;br /&gt;                assertThat(obtido, equalTo(esperado));&lt;br /&gt;        }&lt;br /&gt;}&lt;/pre&gt; &lt;p&gt;O método estático parâmetros deve retornar uma Collection de array com os parâmetros do construtor da classe de teste. Ao executar os testes, o método “umMetodoParaTestarSoma” vai rodar 4 vezes (o número de itens da Collection retornada pelo método anotado da classe).&lt;/p&gt; &lt;p&gt;Note que a classe não herda de TestCase e nem o método de teste precisa seguir a convenção “testXXX”.&lt;/p&gt; &lt;p&gt;Dúvidas, críticas ou sugestões, é só comentar!&lt;/p&gt; &lt;/div&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1971543944217720435-2154143803184110712?l=nobrokenwindow.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=l4C6CBaaJqs:ELzpsXCryWw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=l4C6CBaaJqs:ELzpsXCryWw:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=l4C6CBaaJqs:ELzpsXCryWw:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?i=l4C6CBaaJqs:ELzpsXCryWw:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=l4C6CBaaJqs:ELzpsXCryWw:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://nobrokenwindow.blogspot.com/feeds/2154143803184110712/comments/default" title="Postar comentários" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=1971543944217720435&amp;postID=2154143803184110712" title="0 Comentários" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1971543944217720435/posts/default/2154143803184110712?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1971543944217720435/posts/default/2154143803184110712?v=2" /><link rel="alternate" type="text/html" href="http://nobrokenwindow.blogspot.com/2008/04/testes-parametrizados-com-junit-4.html" title="Testes parametrizados com jUnit 4" /><author><name>Rodrigo</name><uri>http://www.blogger.com/profile/15414819394415097763</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="02353817563116599199" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;CEUGQnY4eSp7ImA9WxdQE0s.&quot;"><id>tag:blogger.com,1999:blog-1971543944217720435.post-4835458294219249095</id><published>2008-04-08T10:00:00.000-03:00</published><updated>2008-06-13T10:03:43.831-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-06-13T10:03:43.831-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="videos" /><category scheme="http://www.blogger.com/atom/ns#" term="agilidade" /><title>Vídeo: uma fábula ágil</title><content type="html">&lt;div class="main"&gt;   &lt;div class="snap_preview"&gt;&lt;p&gt;Achei esse vídeo no &lt;a href="http://blogdoabu.blogspot.com/" target="_blank"&gt;Blog do Abu&lt;/a&gt;. É um bom exemplo da filosofia “ágil” e como vários problemas pequenos se transformam em um problemão a longo prazo. Além de ser bem engraçado.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;object height="350" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/g_Y-eHsADrw"&gt;&lt;param name="wmode" value="transparent"&gt;&lt;embed src="http://www.youtube.com/v/g_Y-eHsADrw&amp;amp;rel=0" type="application/x-shockwave-flash" wmode="transparent" height="350" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Quem quiser saber mais sobre processos ágeis, um bom começo é &lt;a href="http://agilemanifesto.org/" target="_blank"&gt;aqui&lt;/a&gt; e &lt;a href="http://pt.wikipedia.org/wiki/Desenvolvimento_%C3%A1gil_de_software" target="_blank"&gt;aqui&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Até o próximo post!&lt;/p&gt; &lt;/div&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1971543944217720435-4835458294219249095?l=nobrokenwindow.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=3Z401JMO4-M:bd_9l9-qZ9s:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=3Z401JMO4-M:bd_9l9-qZ9s:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=3Z401JMO4-M:bd_9l9-qZ9s:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?i=3Z401JMO4-M:bd_9l9-qZ9s:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=3Z401JMO4-M:bd_9l9-qZ9s:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://nobrokenwindow.blogspot.com/feeds/4835458294219249095/comments/default" title="Postar comentários" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=1971543944217720435&amp;postID=4835458294219249095" title="0 Comentários" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1971543944217720435/posts/default/4835458294219249095?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1971543944217720435/posts/default/4835458294219249095?v=2" /><link rel="alternate" type="text/html" href="http://nobrokenwindow.blogspot.com/2008/04/vdeo-uma-fbula-gil.html" title="Vídeo: uma fábula ágil" /><author><name>Rodrigo</name><uri>http://www.blogger.com/profile/15414819394415097763</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="02353817563116599199" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;C04MR384cSp7ImA9WxdQE0s.&quot;"><id>tag:blogger.com,1999:blog-1971543944217720435.post-6408655162007366509</id><published>2008-04-06T00:00:00.000-03:00</published><updated>2008-06-13T09:59:46.139-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-06-13T09:59:46.139-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="openUP" /><category scheme="http://www.blogger.com/atom/ns#" term="agilidade" /><category scheme="http://www.blogger.com/atom/ns#" term="processos" /><title>Visão geral sobre o OpenUP</title><content type="html">&lt;div class="main"&gt;   &lt;div class="snap_preview"&gt;&lt;p&gt;&lt;strong&gt;Introdução&lt;/strong&gt;&lt;br /&gt;OpenUP é um &lt;span style="text-decoration: line-through;"&gt;metodologia&lt;/span&gt; processo “enxuto” baseado no &lt;a href="http://pt.wikipedia.org/wiki/Processo_Unificado" target="_blank"&gt;Unified Process&lt;/a&gt; e que segue uma filosofia ágil ao mesclar características de &lt;a href="http://pt.wikipedia.org/wiki/Programa%C3%A7%C3%A3o_Extrema" target="_blank"&gt;XP&lt;/a&gt; e &lt;a href="http://pt.wikipedia.org/wiki/Scrum" target="_blank"&gt;Scrum&lt;/a&gt;. É guiado por princípios ágeis como balanceamento de prioridades, colaboração, mitigação de riscos e evolução contínua. Possuí uma organização de papéis e atividades bem definida. Os requisitos e casos de uso são mapeados em itens de trabalho e o esforço dos envolvidos é organizado em microincrementos que agregam valor ao produto final (o software).&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Iterativo e Incremental&lt;/strong&gt;&lt;br /&gt;Todo ciclo de vida no OpenUP é &lt;a href="http://pt.wikipedia.org/wiki/Desenvolvimento_iterativo_e_incremental" target="_blank"&gt;iterativo e incremental&lt;/a&gt;. O processo é dividido em quatro fases (ou marcos):&lt;/p&gt; &lt;ul&gt;&lt;li&gt;Concepção: entenda o projeto.&lt;/li&gt;&lt;li&gt;Elaboração: entenda melhor, projete, elimine os riscos.&lt;/li&gt;&lt;li&gt;Construção: implemente as funcionalidades.&lt;/li&gt;&lt;li&gt;Transição: teste, homologue, obtenha a aceitação.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Cada fase representa um marco para redução de riscos. O OpenUP busca reduzir o risco logo no início do projeto ao mesmo tempo que agrega valor.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Vantagens&lt;/strong&gt;&lt;br /&gt;Foco na &lt;a href="http://pt.wikipedia.org/wiki/Arquitetura_de_software" target="_blank"&gt;arquitetura&lt;/a&gt;: diferente de outras metodologias que pregam o “sair fazendo”, o OpenUP foca na arquitetura como mitigação de riscos no início do projeto.&lt;br /&gt;Documentação essencial: a documentação de um sistema deve ser utilizada durante seu desenvolvimento e não deve ser burocrática. Mas deve haver uma documentação essencial e não apenas um punhado de esboços e rabiscos como prega o XP extremo.&lt;br /&gt;Colaboração: o OpenUP valoriza muito times auto-organizados. Isto significa que a equipe como um todo é responsável por organizar o trabalho e determinar como melhor atingir seus compromissos.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Mais informações&lt;/strong&gt;&lt;br /&gt;&lt;a href="http://josepaulopapo.blogspot.com/" target="_blank"&gt;Blog do José Papo: um dos pioneiros desta metodologia no Brasil.&lt;/a&gt;&lt;br /&gt;&lt;a href="http://epf.eclipse.org/wikis/openuppt/" target="_blank"&gt;Site Oficial do OpenUP (em português).&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.visaoagil.com/downloads/edicoes/VA_03.pdf" target="_blank"&gt;Matéria sobre OpenUP na revista Visão Ágil (página 25).&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Dúvidas, sugestões ou críticas, comentem!&lt;/p&gt; &lt;/div&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1971543944217720435-6408655162007366509?l=nobrokenwindow.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=Uro0qFzhmlI:Nb2Zc0kpUQI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=Uro0qFzhmlI:Nb2Zc0kpUQI:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=Uro0qFzhmlI:Nb2Zc0kpUQI:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?i=Uro0qFzhmlI:Nb2Zc0kpUQI:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nobrokenwindow?a=Uro0qFzhmlI:Nb2Zc0kpUQI:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nobrokenwindow?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://nobrokenwindow.blogspot.com/feeds/6408655162007366509/comments/default" title="Postar comentários" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=1971543944217720435&amp;postID=6408655162007366509" title="0 Comentários" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1971543944217720435/posts/default/6408655162007366509?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1971543944217720435/posts/default/6408655162007366509?v=2" /><link rel="alternate" type="text/html" href="http://nobrokenwindow.blogspot.com/2008/04/viso-geral-sobre-o-openup.html" title="Visão geral sobre o OpenUP" /><author><name>Rodrigo</name><uri>http://www.blogger.com/profile/15414819394415097763</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="02353817563116599199" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry></feed>
