<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6820798</id><updated>2011-05-07T12:13:13.364-03:00</updated><title type='text'>Fragmental</title><subtitle type='html'>Phillip Calçado, a.k.a. "Shoes" é mais um desses tecno-hippies que se descreve na terceira pessoa e que acha que a tecnologia que está sendo usada hoje é uma porcaria vivendo atrás de coisas mais novas, mais diferentes, mais bizarras e teima em chamar isso de simplicidade.
&lt;br&gt;
Programador, discípulo de Zahl, JUG Leader do &lt;a href="http://www.riojug.org"&gt;RioJUG&lt;/a&gt; e colaborador do &lt;a href="http://www.guj.com.br"&gt;GUJ&lt;/a&gt;, tem um peculiar modo de escrever nem sempre compreensível...</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://pcalcado.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://pcalcado.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Shoes</name><uri>http://www.blogger.com/profile/10271507933128080345</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.guj.com.br/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>67</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6820798.post-112951699964521909</id><published>2005-10-17T00:40:00.000-02:00</published><updated>2005-10-17T00:43:19.650-02:00</updated><title type='text'>Mudança</title><content type='html'>Bom, quem acessava o blog diretamente eh bom clicar aqui e ver as mudanças.&lt;br /&gt;&lt;br /&gt;Rapidamente: estou deixandod e usar o Blogger (obrigado por tudo, Google) e passando a usar WordPress no meu proprio site. Nao haverao mais posts novos neste blog, alterem seus bookmarks para http://www.fragmental.com.br/blog&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6820798-112951699964521909?l=pcalcado.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pcalcado.blogspot.com/feeds/112951699964521909/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6820798&amp;postID=112951699964521909&amp;isPopup=true' title='3 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112951699964521909'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112951699964521909'/><link rel='alternate' type='text/html' href='http://pcalcado.blogspot.com/2005/10/mudana.html' title='Mudança'/><author><name>Shoes</name><uri>http://www.blogger.com/profile/10271507933128080345</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.guj.com.br/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6820798.post-112921071152182747</id><published>2005-10-13T10:30:00.000-03:00</published><updated>2005-10-13T10:38:31.526-03:00</updated><title type='text'>O Russo da Califórnia</title><content type='html'>Teve reunião no RioJUG semana passada. Pra variar uma figura notável ganhou a assinatura de revista.&lt;br /&gt;&lt;br /&gt;Nunca havia visto ele na reunião, e logo percebi porque. Yuri é Russo, mora na Califórnia há dez anos, aprendeu português (muito razoável) semestre passado, está tirando seu Phd em Berkley e está na UFRJ trabalhando em sua pesquisa.&lt;br /&gt;&lt;br /&gt;E qual o campo dele? ERPs? Sistema flaxíveis? Integração? Não, Sociologia.&lt;br /&gt;&lt;br /&gt;O campo de estudo do Yuri é como os engenheiros e técnicos de TI adquirem informação. Realmente, um campo muito interessante.&lt;br /&gt;&lt;br /&gt;Veja a nós mesmos. Pessoas que ganham acima da média nacional e precisam se atualizar constantemente. Um ramo cheio de crenças e convicções, quase que uma religião, e vivendo eventuais guerras santas. Temos hippies, suits, quem só quer ganhar dinheiro e voltar pra casa, filantropos, líderes... tudo isso dentro de um ambiente altamente coorporativo. Temos doutores e molequees conversando de igual para igual (por menos que os doutores admitam isso). Em alguma madrugada, qualquer um pode entrar no quarto, virar a noite programando e mudar o mundo da tecnologia com algum conceito novo.&lt;br /&gt;&lt;br /&gt;Não pude ficar muito tempo lá, mas vou pegar o e-mail dele e pedir que me inclua na lista de distribuição de uma publicação neste tema.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6820798-112921071152182747?l=pcalcado.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pcalcado.blogspot.com/feeds/112921071152182747/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6820798&amp;postID=112921071152182747&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112921071152182747'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112921071152182747'/><link rel='alternate' type='text/html' href='http://pcalcado.blogspot.com/2005/10/o-russo-da-califrnia.html' title='O Russo da Califórnia'/><author><name>Shoes</name><uri>http://www.blogger.com/profile/10271507933128080345</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.guj.com.br/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6820798.post-112915234668318411</id><published>2005-10-12T18:21:00.000-03:00</published><updated>2005-10-13T21:18:02.013-03:00</updated><title type='text'>Chega</title><content type='html'>de referendo pra mim. Eu voto no sim, mas to cansado de ver argumentos idiotas por todos os lados. ja nao discuto mais, ja nao debato mais.&lt;br /&gt;&lt;br /&gt;A conversa agora eh na base do hoax. TV globo isso, veja aquilo, por favor. A globo apoia o sim, a veja apoia o nao. Duas entidades classicas de midia manipuladora comprada, mas quem ta de um lado soh sabe acusar o outro.&lt;br /&gt;&lt;br /&gt;Soh quero que isso acabe logo porque tenho certeza que nao vai mudar nada. O que me da medo sao as pessoas que falam tanta besteira e acreditam em cada coisa ridicula saindo armadas por ai. Esse referendo so teve uma finalidade: mostrar que a sociedade eh manipulavel e naoe sta pronta para votar em algo assim. Esqueçam este papo de democracia, quem usa HOAX e FUD para defender um direito nao merece votar ou dirigir.&lt;br /&gt;&lt;br /&gt;A unica coisa que realmente vai me afetar deste referendo eh o fato de ser mesario. O resto, dane-se. Cansei dessas discussoes idiotas.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Update&lt;/span&gt; pra variar, Mauricio Ricardo &lt;a href="http://charges.uol.com.br/vercharge.php?idcharge=1878&amp;amp;modo=som"&gt;arrebenta&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6820798-112915234668318411?l=pcalcado.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pcalcado.blogspot.com/feeds/112915234668318411/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6820798&amp;postID=112915234668318411&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112915234668318411'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112915234668318411'/><link rel='alternate' type='text/html' href='http://pcalcado.blogspot.com/2005/10/chega.html' title='Chega'/><author><name>Shoes</name><uri>http://www.blogger.com/profile/10271507933128080345</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.guj.com.br/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6820798.post-112895164814992716</id><published>2005-10-10T10:35:00.000-03:00</published><updated>2005-10-10T10:40:48.293-03:00</updated><title type='text'>Pissed off</title><content type='html'>O que leva grevistas a achar que podem para com o trabalho dos outros? Não estou falando de seus colegas não, estou falando de mim mesmo e pessoas que não trabalham e nunca trabalharam nesta &lt;a href="http://www.bb.com.br/"&gt;droga de banco&lt;/a&gt;. Não sou funcionário, não sou grevista, não sou acionista, não sou correntista, não mandei ninguém fazer concurso pra essa droga, não sou político nem jornalista.&lt;br /&gt;&lt;br /&gt;Que direito essas pessoas acham que tem de me barrar na entrada do meu trabalho? Querem protestar? protestem. Quebrem uma agência, roubem o dinheiro todo DANE-SE, não me importo e os seus diretores vão ficar loucos. Agora encher o saco de alguém que não tme anda com isso. Engraçado que são sempre as mesmas pessoas nesses negócios de greve, o povo que vai como vaca pro abate e o grupinho de gente que adora agitar essas coisas, e quando cai em Brasília só faz besteira.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Desculpem o desabafo, não resisti.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Ah, estou fazendo umas mudanças no fragmental.com.br, acessem o blog diretamente ;)&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6820798-112895164814992716?l=pcalcado.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pcalcado.blogspot.com/feeds/112895164814992716/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6820798&amp;postID=112895164814992716&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112895164814992716'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112895164814992716'/><link rel='alternate' type='text/html' href='http://pcalcado.blogspot.com/2005/10/pissed-off.html' title='Pissed off'/><author><name>Shoes</name><uri>http://www.blogger.com/profile/10271507933128080345</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.guj.com.br/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6820798.post-112888955956061842</id><published>2005-10-09T16:40:00.000-03:00</published><updated>2005-10-09T17:25:59.600-03:00</updated><title type='text'>Uma Rosa Com Outro Nome...</title><content type='html'>Imagina a cena. Seu colega pede ajuda num trecho qualquer de código. Ele começa a te explicar o que está fazendo:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Então&lt;span style="font-style: italic;"&gt; (ele é paulista)&lt;/span&gt;, eu criei esse agrupamento de instruções parametrizáveis, que retorna um valor que é uma cópia de um objeto. Daí eu agrupei alguns destes numa unidade e coloquei algumas variáveis que eles compartilham. Como alguns destes agrupamentos não são utilizados por outros agrupamentos externos, defini uma política de exposição para eles...&lt;/blockquote&gt;&lt;br /&gt;Você entendeu? Dependendo do sue nível de imersão em cosias abstratas relacionadas á programação, talvez sim, mas o desenvolvedor mediano vai fazer "uhum" algumas vezes e olhar para o código para ver o que esse cidadão queria dizer. E ele vê o que ele tentou explicar:&lt;br /&gt;&lt;br /&gt; &lt;span style="font-family: courier new; color: rgb(153, 0, 0);"&gt;public class Usuario{&lt;/span&gt;&lt;br /&gt; &lt;span style="font-family: courier new; color: rgb(153, 0, 0);"&gt;    private int idade;&lt;/span&gt;&lt;br /&gt; &lt;span style="font-family: courier new; color: rgb(153, 0, 0);"&gt;    private boolean sexo;&lt;/span&gt;&lt;br /&gt; &lt;span style="font-family: courier new; color: rgb(153, 0, 0);"&gt;    private double altura;&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="font-family: courier new; color: rgb(153, 0, 0);"&gt;    public void setIdade(int idadeNova){&lt;/span&gt;&lt;br /&gt; &lt;span style="font-family: courier new; color: rgb(153, 0, 0);"&gt;        if (idadeNova&gt;13) {&lt;/span&gt;&lt;br /&gt; &lt;span style="font-family: courier new; color: rgb(153, 0, 0);"&gt;            idade= idadeNova;&lt;/span&gt;&lt;br /&gt; &lt;span style="font-family: courier new; color: rgb(153, 0, 0);"&gt;             calcularAltura();&lt;/span&gt;&lt;br /&gt; &lt;span style="font-family: courier new; color: rgb(153, 0, 0);"&gt;        }&lt;/span&gt;&lt;br /&gt; &lt;span style="font-family: courier new; color: rgb(153, 0, 0);"&gt;       else{&lt;/span&gt;&lt;br /&gt; &lt;span style="font-family: courier new; color: rgb(153, 0, 0);"&gt;           throw new IllegalArgumentException("Idade baixa demais para usar o sistema" );&lt;/span&gt;&lt;br /&gt; &lt;span style="font-family: courier new; color: rgb(153, 0, 0);"&gt;       }&lt;/span&gt;&lt;br /&gt; &lt;span style="font-family: courier new; color: rgb(153, 0, 0);"&gt;    }&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="font-family: courier new; color: rgb(153, 0, 0);"&gt;    private calcularAltura(){&lt;/span&gt;&lt;br /&gt; &lt;span style="font-family: courier new; color: rgb(153, 0, 0);"&gt;        altura=idade*10.45;&lt;/span&gt;&lt;br /&gt; &lt;span style="font-family: courier new; color: rgb(153, 0, 0);"&gt;    }&lt;/span&gt;&lt;br /&gt; &lt;span style="font-family: courier new; color: rgb(153, 0, 0);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Aí você pensa&lt;br /&gt;&lt;blockquote&gt;Caramba, não seria mais fácil ele dizer que fez &lt;span style="font-weight: bold;"&gt;uma classe &lt;/span&gt;com &lt;span style="font-weight: bold;"&gt;métodos públicos e privados &lt;/span&gt;e &lt;span style="font-weight: bold;"&gt;atributos privados?&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Seria, mas e se ele não conhecesse este termo? Sim, o exemplo é bem forçado, mas é de propósito.&lt;br /&gt;&lt;br /&gt;Muita gente torce o nariz quando alguém mostra um Pattern. Logo pensam: "Quanta besteira...eu uso isso há anos!" e esquecem que tão importante quanto criar Patterns é &lt;span style="font-weight: bold;"&gt;catalogá-los&lt;/span&gt;. Pense em algum padrão que você use no dia a dia. Agora imagina que você tem uma dúvida com o uso deste.&lt;br /&gt;&lt;br /&gt;Você vai num fórum qualquer, o &lt;a href="http://www.guj.com.br/forums/list.java"&gt;GUJ &lt;/a&gt;por exemplo, e tenta descrever sua dúvida. Você pode gastar dois parágrafos explicando o que fez ou pode simplesmente dizer o nome do Padrão e a pessoa que ler já sabe do que se trata (ou pelo menos vai saber se procurar).&lt;br /&gt;&lt;br /&gt;Existem &lt;a href="http://www.amazon.com/exec/obidos/tg/detail/-/0201741571/102-6632566-6700147?v=glance"&gt;livros&lt;/a&gt; e sites que fazem apenas isso. Eles documentam e catalogam padrões, colocam eles dentro de contextos, listam vantagens e desvantagens, mas não necessariamente criam nada novo. Você não vai encontrar novas geniais soluções, apenas soluções clássicas catalogadas.&lt;br /&gt;&lt;br /&gt;Além do óbvio benefício de acabar conhecendo uma solução que já é clássica mas você não conhecia, outro benefício não tão óbvio está simplesmente em termos um idioma comum entre profissionais.&lt;br /&gt;&lt;br /&gt;Se você falar para alguém de .Net ou C++ que fez um Observer, ele provavelmente sabe do que você está falando. Se falar que usa um DAO, apesar de ser algo mais comum em Java EE, é bem capaz de ser entendido (menos pelo cara do .Net que pode se confundir com esse negócio de &lt;a href="http://msdn.microsoft.com/data/Default.aspx"&gt;DAO/ADO&lt;/a&gt;), como este padrão também tem &lt;a href="http://www.martinfowler.com/eaaCatalog/dataMapper.html"&gt;outros nomes mais genéricos&lt;/a&gt;, pode ser que ele também use isso nas suas aplicações.&lt;br /&gt;&lt;br /&gt;Um padrão não é padrão desde seu nascimento. Ele nasce como uma solução isolada, e de repente alguém pensa "Ei, eu posso resolver este problema do mesmo jeito que fiz naquele caso..." (por isso &lt;a href="http://blogs.tedneward.com/"&gt;Ted Neward&lt;/a&gt; fala que o&lt;a href="http://www.theserverside.com/news/thread.tss?thread_id=34780"&gt; sistema só morre quando as máquinas são desligadas, o código fonte é apagado e o último desenvolvedor é morto&lt;/a&gt;). E por mais que você use e reuse, ensine esta técnica ela só vai virar um padrão no dia em que for catalogada. Seja em um livro, paper ou site ou qualquer coisa.&lt;br /&gt;&lt;br /&gt;Se alguém te disser que recebeu um buquê de as &lt;span style="font-style: italic;"&gt;flores que pertencem à família rosasceae, que são arbustos ou trepadeiras, providos de acúleos com folhas simples partidas em 5 ou 7 lóbulos de bordos denteados, com 5 pétalas, muitos estamos e um ovário ínfero&lt;/span&gt;... estão continuam sendo &lt;a href="http://pt.wikipedia.org/wiki/Rosa"&gt;rosas&lt;/a&gt;, mas não seria mais fácil se vocês falassem a mesma língua?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6820798-112888955956061842?l=pcalcado.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pcalcado.blogspot.com/feeds/112888955956061842/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6820798&amp;postID=112888955956061842&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112888955956061842'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112888955956061842'/><link rel='alternate' type='text/html' href='http://pcalcado.blogspot.com/2005/10/uma-rosa-com-outro-nome.html' title='Uma Rosa Com Outro Nome...'/><author><name>Shoes</name><uri>http://www.blogger.com/profile/10271507933128080345</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.guj.com.br/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6820798.post-112845590005774454</id><published>2005-10-04T16:43:00.000-03:00</published><updated>2005-10-04T16:58:48.793-03:00</updated><title type='text'></title><content type='html'>&lt;a href="http://www.pyrasun.com/mike/mt/"&gt;Mike Spille&lt;/a&gt; escreveu sobre sua experiência com &lt;a href="http://groovy.codehaus.org/"&gt;Groovy &lt;/a&gt;no TSS. Vale uma &lt;a href="http://www.theserverside.com/blogs/showblog.tss?id=GroovyReview"&gt;lida&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt; &lt;div style="text-align: center;"&gt;&lt;img style="width: 289px; height: 44px;" src="http://www.theserverside.com/blogs/content/GroovyReview/groovy.jpg" align="middle" border="0" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Concordo com muito do que ele falou, mas o maior problema de Groovy hoje, na minha opinião, é um debug decente. As Stacktraces não dizem muita coisa (só perdem pras Stacktraces bizarras do Hibernate, SqlWalker é complicado...) e debugar no olho é terrível, aidna mais pra quem não é tão proficiente na linguagem ou está aprendendo.&lt;br /&gt;&lt;br /&gt;mas Groovy é uma linguagem muito legal e membro de uma tendência. Se você precisa de algum script portável, considere imensamente seu uso. Se precisa de uma linguagem bonitinha e cheia de recursos (&lt;span style="font-style: italic;"&gt;&lt;a href="http://groovy.codehaus.org/Closures"&gt;closures&lt;/a&gt;! weeeeeeeeeeeeeee!!)&lt;/span&gt;que tenha a sua disposição toda a JVM e APIs, frameworks, e demais coisas que não te fazem abandonar java, dê uma olhada.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://groovy.codehaus.org/"&gt;&lt;img src="http://groovy.codehaus.org/images/groovy-logo.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Eu sei que foram...sei lá, cinco anos que a única linguagem além de Java foi SQL, mas isso está mudando. As&lt;a href="http://opal.cabochon.com/%7Estevey/sokoban/"&gt; linguagens para a JVM estão aí&lt;/a&gt;, com &lt;a href="http://www.jcp.org/en/jsr/detail?id=223"&gt;suporte total&lt;/a&gt; no &lt;a href="https://mustang.dev.java.net/"&gt;Java 6.0 Mustang&lt;/a&gt;. Seja por &lt;a href="http://www.gotdotnet.com/team/lang/"&gt;pressão do .Net&lt;/a&gt;, seja por java não ter algumas coisas legais, acabou o monopólio.&lt;br /&gt;&lt;br /&gt;Aprenda Groovy, Python, Ruby... alguma outra coisa. Saia da zona de conforto.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6820798-112845590005774454?l=pcalcado.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pcalcado.blogspot.com/feeds/112845590005774454/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6820798&amp;postID=112845590005774454&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112845590005774454'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112845590005774454'/><link rel='alternate' type='text/html' href='http://pcalcado.blogspot.com/2005/10/mike-spille-escreveu-sobre-sua.html' title=''/><author><name>Shoes</name><uri>http://www.blogger.com/profile/10271507933128080345</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.guj.com.br/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6820798.post-112801503122587710</id><published>2005-09-29T14:29:00.000-03:00</published><updated>2005-09-29T14:30:31.230-03:00</updated><title type='text'>Microsoft Windows Officially Broken</title><content type='html'>Não gosto de postar links sem comentários, mas ainda não acabei esse, só achei muito interessante.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.smartofficenews.com.au/Computing/Platforms_And_Applications?article=/Computing/Platforms%20And%20Applications/News/E5T7U6H8"&gt;Microsoft Windows Officially Broken&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6820798-112801503122587710?l=pcalcado.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pcalcado.blogspot.com/feeds/112801503122587710/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6820798&amp;postID=112801503122587710&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112801503122587710'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112801503122587710'/><link rel='alternate' type='text/html' href='http://pcalcado.blogspot.com/2005/09/microsoft-windows-officially-broken.html' title='Microsoft Windows Officially Broken'/><author><name>Shoes</name><uri>http://www.blogger.com/profile/10271507933128080345</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.guj.com.br/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6820798.post-112800162051040285</id><published>2005-09-29T10:14:00.000-03:00</published><updated>2005-09-29T10:47:00.546-03:00</updated><title type='text'>Dá-lhe Rubinho</title><content type='html'>Perdão pelo título engraçadinho, não pretendo falar de Fórmula 1 hoje.&lt;br /&gt;&lt;br /&gt;Mas a analogia é válida (creio). Você lembra de 2003/2002? Lula foi eleito e tomou posse, EUA invadem Afeganistão, Espanha adota o Euro, &lt;span style="font-style: italic;"&gt;Ataque dos Clones &lt;/span&gt;nos cinemas, Columbia se desintegrou, SARS invade o oriente... e o Struts e outros frameworks MVC para web precoces são a nova onda na comunidade Java.&lt;br /&gt;&lt;br /&gt;Enquanto isso, Sun, IBM e demais forçavam na trindade BMP/CMP+SessionBeans+Servlets. E a comunidade surge com esse tal MVC.&lt;br /&gt;&lt;br /&gt;Três anos de palestras em JUGs e eventos, melhorias, concorrência e hoje (ontem, eu diria) o MVC está em tudo relacionado a Web. E surge para o mercado o tão falando JSF.&lt;br /&gt;&lt;br /&gt;E o que a comunidade está fazendo? Adotando JSF em massa? Depende.&lt;br /&gt;&lt;br /&gt;Quem curte seguir a tendência das grandes, está de olho nas IDEs JSF, Struts Shale, MyFaces, blablabla. Quem curte tecnologia está de olho em &lt;a href="http://www.rubyonrails.com/"&gt;Rails&lt;/a&gt;. Quanto tempo para acontecer o mesmo que acotneceu com o Struts?&lt;br /&gt;&lt;br /&gt;Bem, existem mais dificuldades. O Struts:&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;É em Java&lt;/li&gt;   &lt;li&gt;É da Apache&lt;/li&gt; &lt;/ul&gt; O Rails:&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;É em Ruby&lt;/li&gt;   &lt;li&gt;Não á da Apache&lt;br /&gt;  &lt;/li&gt; &lt;/ul&gt; Quanto a ser em Ruby, minha dica é: aprenda &lt;a href="http://www.ruby-lang.org/en/"&gt;Ruby&lt;/a&gt;. Mas como mesmo se você aprender a codificar em Ruby ainda tem toda a pilha Java EE que não vai ser migrada (nem estou sugerindo que seja), e sua emrpesa não vai usar Ruby tão cedo (a menos que você trabalhe num lugar legal, claro, mas isso é raro).&lt;br /&gt;&lt;br /&gt;Então já temos pelo menos duas alternativas "sérias" em desenvolvimento:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;&lt;a href="http://groovy.codehaus.org/Grails"&gt;Grails&lt;/a&gt;&lt;/li&gt;   &lt;li&gt;&lt;a href="https://trails.dev.java.net/"&gt;Trails&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Mas o que é o Ruby on Rails e porque ele faz tanto sucesso? &lt;/span&gt;É um framework para a criação de aplicações web em Ruby muito simples, prático, produtivo e agradável.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Por que ele é legal? &lt;/span&gt;Basicamente porque ele facilita sua vida. Rails é baseado em convenções. Com alguns comandos, você cria sua aplicação completa, se quiser personalizar (e você vai querer...), é só alterar os pontos certos.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Posso fazer tudo com Rails?&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;&lt;/span&gt;Obviamente não. Eu estou usando apra aplicações web simples, ams alguém com muita proficiência em Ruby com certeza consegue fazer muito mais. Claro que para aplicações complexas, a paltaforma Java EE continua no seu lugarzinho, mas do jeito que java tende a tornar complexas coisas simples como uma pequena aplicação web CRUD de qualidade razoável ("tudo em JSP" não é opção aqui), essa nova alternativa promete.&lt;br /&gt;&lt;br /&gt;Então, quanto tempo?&lt;br /&gt;&lt;br /&gt;Engraçado, no debate ontem as pessoas falavam que cultura de "abrir um software para consertar" era coisa de maluco, que nenhum CEO ia querer isso. Um cara da IBM &lt;span style="font-style: italic;"&gt;(aliás, ótima palestra! Muito acima da média e infinitamente acima das outras que já assiti da IBM, recomendo que procurem &lt;/span&gt;&lt;a style="font-style: italic;" href="http://www.websphere.org/groups.php?groupid=106"&gt;os slides aqui &lt;/a&gt;&lt;span style="font-style: italic;"&gt;assim que disponíveis)&lt;/span&gt;, um do governo &lt;span style="font-style: italic;"&gt;(aliás foi meu professor há alguns anos... de Java)&lt;/span&gt;, o Eliziário representando o capitalismo moderno e o Xexéo, acadêmico discutindo Linux. Você pensaria nisso ha dez anos? Que essas empresas &lt;span style="font-weight: bold;"&gt;usam&lt;/span&gt; e &lt;span style="font-weight: bold;"&gt;apoiam&lt;/span&gt; software aberto, em maior ou menor escala?&lt;br /&gt;&lt;br /&gt;As coisas andam, e nesse ramo andam rápido demais. Há muito tempo a influência da comunidade no mundo de tecnologia é extremamente forte. Hibernate, Spring, Struts, MySQL, Java, Python, Linux... tudo isso cresceu na vontade das pessoas antes de alguma empresa comprar a idéia. Demora, mas elas compram.&lt;br /&gt;&lt;br /&gt;E demora tanto que quando enfim a IBM lançar alguma cosia &lt;span style="font-style: italic;"&gt;Rails-like&lt;/span&gt;, haverá outra coisa mais &lt;span style="font-style: italic;"&gt;hype&lt;/span&gt;. E o ciclo se repete. E se repete. E se repete.&lt;br /&gt;&lt;br /&gt;Semrpe que penso nesse ciclo lembro de uma pessoa que conheci num banco em um projeto que aprticipei. Cara com mais de 30 anos de profissão,contando os dias para se aposentar. "Eu vou pra praia, vou pra montanha, vou pra PQP, mas NUNCA mais quero saber de computador..."&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6820798-112800162051040285?l=pcalcado.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pcalcado.blogspot.com/feeds/112800162051040285/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6820798&amp;postID=112800162051040285&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112800162051040285'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112800162051040285'/><link rel='alternate' type='text/html' href='http://pcalcado.blogspot.com/2005/09/d-lhe-rubinho.html' title='Dá-lhe Rubinho'/><author><name>Shoes</name><uri>http://www.blogger.com/profile/10271507933128080345</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.guj.com.br/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6820798.post-112793631261683803</id><published>2005-09-28T16:35:00.000-03:00</published><updated>2005-09-28T16:38:32.616-03:00</updated><title type='text'>RioWUG: debate sobre Software Livre</title><content type='html'>Meio atrasado, mas hoje vai acotnecer um evento sobre Software Livre no &lt;a href="http://www.websphere.org/groups.php?groupid=106"&gt;Rio Websphere User's Group&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Eu ainda não tenho certeza se vou estar lá (tudo tende a sim) mas o debate promete, com a presença da pessoa mais polêmica que eu conheço: Marcos Eliziário, do RioJUG.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Date:&lt;/b&gt; Sep 28th, 2005  &lt;br /&gt;&lt;b&gt;Meeting time:&lt;/b&gt; 19:00 - 21:00&lt;br /&gt;&lt;b&gt;Meeting location:&lt;/b&gt; Auditório do SENAC - Rua Santa Luzia, 735/7º andar (no mesmo lugar do &lt;span style="font-weight: bold;"&gt;RioJuG&lt;/span&gt;)&lt;br /&gt;&lt;b&gt;Meeting topic: &lt;/b&gt; Software Livre&lt;br /&gt;&lt;b&gt;Agenda:&lt;/b&gt;&lt;br /&gt; 19:00 - 20:00 - Palestra: "Software Livre: Trajetória, potencialidades e modelos de negócio e desenvolvimento." - Marcelo Savio - IBM&lt;br /&gt;20:10 - 21:30 - Debate com a presença de:&lt;br /&gt;* Geraldo Xexéo - professor adjunto da UFRJ, engenheiro pelo IME (88) e Doutor em Engenharia de Sistemas e Computação pela COPPE/UFRJ (94).&lt;br /&gt;* Marcos Eliziário - Coordenador do RioJUG e Sócio-Gerente da Object Farme, empresa especializada em outsourcing e desenvolvimento offshore;&lt;br /&gt;* Vítor Alvarez, analista de sistemas e membro do subcomitê de software livre do SERPRO&lt;br /&gt;&lt;b&gt;Directions:&lt;/b&gt;&lt;br /&gt; Dica de Acesso: Estação&lt;br /&gt;Cinelândia do Metrô pela saída Santa Luzia, atrás do Consulado Americano&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Additional information: &lt;/b&gt;&lt;br /&gt; Palestrante: Marcelo Savio.&lt;br /&gt;Resumo das Qualificações Profissionais: Arquiteto de Software da IBM, formado em Informática pela UERJ e mestrando em Engenharia de Sistemas e Computação pela COPPE/UFRJ, trabalha há mais de 15 anos na área de TI, ao longo dos quais atuou nas áreas de desenvolvimento, suporte e consultoria.&lt;br /&gt;&lt;br /&gt;Debate: conduzido por profissionais e acadêmicos com conhecimento/experiência na área de Software Livre&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6820798-112793631261683803?l=pcalcado.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pcalcado.blogspot.com/feeds/112793631261683803/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6820798&amp;postID=112793631261683803&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112793631261683803'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112793631261683803'/><link rel='alternate' type='text/html' href='http://pcalcado.blogspot.com/2005/09/riowug-debate-sobre-software-livre.html' title='RioWUG: debate sobre Software Livre'/><author><name>Shoes</name><uri>http://www.blogger.com/profile/10271507933128080345</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.guj.com.br/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6820798.post-112793609963087699</id><published>2005-09-28T16:25:00.000-03:00</published><updated>2005-09-28T16:34:59.636-03:00</updated><title type='text'>DevX: Quem Conhece SQL Usa Stored Procedures</title><content type='html'>O &lt;a href="http://www.devx.com/"&gt;DevX&lt;/a&gt; é um site com altos e baixos (o que é bom, existem muitos sites só com baixos...), mas a seção de Java geralmente é digna de ser ignorada solenemente. Matérias batidas sobre temas batidos, muitas vezes apenas &lt;a href="http://www.devx.com/Java/Article/29162/0/page/1"&gt;um breve copy&amp;paste&lt;/a&gt; (o &lt;a href="http://www.onjava.com"&gt;onjava&lt;/a&gt;.com também têm sofrido deste mal em escala menor).&lt;br /&gt;&lt;br /&gt;Desta vez, temos &lt;a href="http://www.devx.com/Java/Article/29337/0/page/1"&gt;um artigo com uma proposta antiga revista&lt;/a&gt;, o uso de Stored Procedures. Tudo bem, se não fossem pérolas como:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt; Typically, &lt;span style="font-weight: bold;"&gt;those not familiar enough with SQL will choose CMP entity beans or frameworks such as TopLink and &lt;/span&gt;&lt;a style="font-weight: bold;" href="http://www.devx.com/Java/Article/22652/0" target="new"&gt;Hibernate&lt;/a&gt;&lt;span style="font-weight: bold;"&gt;,&lt;/span&gt; which generate queries and help to isolate them from the Java code.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Eu ia comentar isso, mas alguém mais competente que eu já o fez, então fiquem com &lt;a href="http://bbweblog.kevinhooke.com/BBWeblog/viewPost.do?instanceID=1&amp;categoryID=71&amp;amp;entryID=505&amp;amp;action=detail"&gt;a resposta do Kevin&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6820798-112793609963087699?l=pcalcado.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pcalcado.blogspot.com/feeds/112793609963087699/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6820798&amp;postID=112793609963087699&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112793609963087699'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112793609963087699'/><link rel='alternate' type='text/html' href='http://pcalcado.blogspot.com/2005/09/devx-quem-conhece-sql-usa-stored.html' title='DevX: Quem Conhece SQL Usa Stored Procedures'/><author><name>Shoes</name><uri>http://www.blogger.com/profile/10271507933128080345</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.guj.com.br/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6820798.post-112785190594074630</id><published>2005-09-27T16:57:00.000-03:00</published><updated>2005-09-27T19:09:25.856-03:00</updated><title type='text'>heavy users</title><content type='html'>Você é um heavy user de coisas-relacionadas-ao-computador?&lt;br /&gt;&lt;br /&gt;Para mim, não se você não responder sim a pelo menos 80% destas questões.&lt;br /&gt;&lt;ol&gt;   &lt;li&gt;Você sabe o que é uma licença Creative Commons?&lt;/li&gt;   &lt;li&gt;Você conhece Ruby há mais de dois anos?&lt;/li&gt;   &lt;li&gt;Não consegue entender como tem site que não disponibiliza uma API e tags?&lt;/li&gt;   &lt;li&gt;Queria poder usar tags no mundo real?&lt;br /&gt;&lt;/li&gt;   &lt;li&gt;Usa algum agregador? Há mais de um ano?&lt;/li&gt;   &lt;li&gt;Seu site tem RSS/Atom?&lt;/li&gt;   &lt;li&gt;Não lê frequentemente sites que não tem um feed?&lt;br /&gt;&lt;/li&gt;   &lt;li&gt;Sabe  a diferença entre RSS e Atom?&lt;/li&gt;   &lt;li&gt;Quis ter ou tem um iPod mesmo sabendo que existem opções mais baratas?&lt;br /&gt;&lt;/li&gt;   &lt;li&gt;Mesmo usando winamp na maioria das vezes acha o iTunes legalzinho?&lt;/li&gt;   &lt;li&gt;Usa ICQ ou pelo menos tem uma conta lá?&lt;/li&gt;   &lt;li&gt;Já tentou usar Jabber, tem conta lá, mas desistiu porque ninguém usa aquilo?&lt;br /&gt;&lt;/li&gt;   &lt;li&gt;Programa, mesmo que não profissionalmente?&lt;/li&gt;   &lt;li&gt;Achou seus últimos empregos na Internet?&lt;/li&gt;   &lt;li&gt;Já teve uns 10 blogs?&lt;/li&gt;   &lt;li&gt;Compra um CD, ripa em MP3 e nunca mais abre a caixinha?&lt;/li&gt;   &lt;li&gt;Tem uma conta no gmail ha mais de um ano e tem mais de 50% consumido?&lt;/li&gt;   &lt;li&gt;Usava orkut (apenas) antes da invasão brasileira?&lt;/li&gt;   &lt;li&gt;Lê blogs como quem lê um jornal?&lt;/li&gt;   &lt;li&gt;Frequenta a Wikipedia?&lt;/li&gt;   &lt;li&gt;Contribui para a Wikipedia?&lt;/li&gt;   &lt;li&gt;Tem conta no flickr?&lt;/li&gt;   &lt;li&gt;Tem conta no del.icio.us?&lt;/li&gt;   &lt;li&gt;Sabe o que é AJAX?&lt;/li&gt;   &lt;li&gt;Já usou Linux?&lt;/li&gt;   &lt;li&gt;Usa Firefox?&lt;/li&gt;   &lt;li&gt;Tem extensões instaladas no seu Firefox?&lt;/li&gt;   &lt;li&gt;Usa greasemonkey?&lt;br /&gt;&lt;/li&gt; &lt;/ol&gt; Sugestões de adições a lista são bem-vindas :D&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6820798-112785190594074630?l=pcalcado.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pcalcado.blogspot.com/feeds/112785190594074630/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6820798&amp;postID=112785190594074630&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112785190594074630'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112785190594074630'/><link rel='alternate' type='text/html' href='http://pcalcado.blogspot.com/2005/09/heavy-users.html' title='heavy users'/><author><name>Shoes</name><uri>http://www.blogger.com/profile/10271507933128080345</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.guj.com.br/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6820798.post-112770362391361978</id><published>2005-09-25T23:45:00.000-03:00</published><updated>2005-09-26T00:00:23.926-03:00</updated><title type='text'>Colação de Grau</title><content type='html'>Ontem foi a colaçãod e grau da minha irmã. Pedagoga como 40% da família. Ela entrou na faculdade depois de mim. Aff...&lt;br /&gt;&lt;br /&gt;E novamente Phillip pensa sobre faculdade. PR1 se aproximando no &lt;a href="http://www.estacio.br/"&gt;McDonald's&lt;/a&gt;, os alunos só sabem mandar emails pras listas pedindo prova do professor ciclano, trabalho pronto do professor beltrano... êêê festa.&lt;br /&gt;&lt;br /&gt;E ningém sabe nada de nada. Depois de ouvir que a linguagem Java foi criada como &lt;span style="font-weight: bold; font-style: italic;"&gt;C--&lt;/span&gt;, que só se chama Java por marketing (marketing muito bom esse, porque nunca havia ouvido essa história), que AWT foi criado as pressas, por isso é tão ruim, que Java não tem &lt;span style="font-family: courier new;"&gt;for each&lt;/span&gt;, não trabalha em CGI ("grande vantagem do PHP"), ver códigos de exemplo cheios de NullPointerExceptions óbvias e professores que não sabem o que é um socket, eu imagino esses "profissionais" na linda cerimônia de colação de grau. Serão bacharéis. Em droga nenhuma.&lt;br /&gt;&lt;br /&gt;Olhando as pessoas que estão ali para aprender algo, eu não consigo deixar de me sentir comovido. Dá vontade de falar "saí daí, passa na biblitoeca, esquece essa aula que esse cara só fala merda!", e ocasionalmente eu até falo, mas não costuma dar muito certo. Para quem entra na facudlade sem saber nada (e mesmo os que entram achando que sabem geralmente não sabem nada mais que comprar uma palca de vídeo certa para jogar Doom III), qualquer coisa falada lá na frente por um senhor de 50 anos faz sentido. Só que quase nada (ou quase) dito naquele lugar faz sentido. É 95% de besteira sendo vomitada pela boca de alguém que não tem noção do que fala.&lt;br /&gt;&lt;br /&gt;As úncias aprtes que eu considero legais nas aulas são as experiências dos professores. O melhor professor que eu tenho, tive aula com ele semestre passado, dá uma aula legal porque ele fala muito sobre sua grande experiência de vida. Tá certo que ele parou no tempo há muito tempo (e nem é tão velho assim...) mas &lt;span style="font-weight: bold;"&gt;dá&lt;/span&gt; pra você tirar algo.&lt;br /&gt;&lt;br /&gt;Agora imagina o que é sentar três horas em frente a um cara falando sem parar sobre algo que ele não entende. Nesses, sei lá, quatro anos naquele buraco eu desenvolvi umas técnicas para desligar e ligar a atenção. Ligar quando o professor conta causos, fala de datas, provas e trabalhos, desligar pro resto. O jeito clássico de conhecer professores ruins são os exemplos. Um professor ruim não sabe dar exemplos além dos do livro.&lt;br /&gt;&lt;br /&gt;E assim passa metade de mais um semestre. Ano que vem vou estar aqui chorando minhas pitangas com vocês novamente. Faltam 15 matérias, dá pra terminar em um ano. A droga é que tem que fazer o Projeto Final.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6820798-112770362391361978?l=pcalcado.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pcalcado.blogspot.com/feeds/112770362391361978/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6820798&amp;postID=112770362391361978&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112770362391361978'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112770362391361978'/><link rel='alternate' type='text/html' href='http://pcalcado.blogspot.com/2005/09/colao-de-grau.html' title='Colação de Grau'/><author><name>Shoes</name><uri>http://www.blogger.com/profile/10271507933128080345</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.guj.com.br/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6820798.post-112770251431923075</id><published>2005-09-25T23:06:00.000-03:00</published><updated>2005-09-25T23:45:02.226-03:00</updated><title type='text'>Mono: Quem Usa?</title><content type='html'>Muito tempo que não falo nada do &lt;a href="http://www.mono-project.com/Main_Page"&gt;Mono&lt;/a&gt;, desde meus antigos posts no &lt;a href="http://www.jablo.com.br/page/pcalcado"&gt;Jablô &lt;/a&gt;ou no &lt;a href="http://www.jroller.com/page/pcalcado"&gt;Jroller&lt;/a&gt;, creio. E porquê?&lt;br /&gt;&lt;br /&gt;Simples: &lt;span style="font-weight: bold;"&gt;cadê o mono?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Hoje eu trabalho num ambiente totalmente misto, Windows e Software livre, apesar de tudo Java. Os 14 meses anteriores entretanto eu vivi numa UNIX-shop (e ser assim era um dos motivos para eu ficar lá). Nunca ouvi falar de Mono neste meio.&lt;br /&gt;&lt;br /&gt;No &lt;a href="http://www.bloglines.com/public/pcalcado"&gt;meu bloglines&lt;/a&gt; tem, além de diversos outros amigos do tio Bill,&lt;a href="http://www.mono-project.com/news.html"&gt; notícias do projeto&lt;/a&gt; e o &lt;a href="http://tirania.org/blog/index.html"&gt;blog do Icaza&lt;/a&gt;, e tudo que vejo são eles comemorando um compilador melhor, uma IDE menos isso, mais aquilo. O &lt;a href="http://monobrasil.sl.org.br/wiki/P%C3%A1gina_principal"&gt;Mono Brasil&lt;/a&gt; parece bem ativo, mas a minha pergutna é quem usa? Onde?&lt;br /&gt;&lt;br /&gt;Não estou duvidando do potencial da plataforma .Net em si. A Microsoft conseguiu fazer algo legal, contratou os caras certos, porém... bem a Microsoft é a Microsoft e a sede por monopólio (porque sede por dinheiro todas as empresas têm, óbvio) acaba destruindo um pouco das coisas legais. O próprio povo da MS fala mal do Mono, como se &lt;a href="http://www.linhadecodigo.com.br/artigos.asp?id_ac=816&amp;sub=0"&gt;vê aqui&lt;/a&gt;. Não sei bem o que "MSDN Regional Director" significa, e todo mundo tá careca de saber que Mauro Sant' anna não sabe mais sobre programação que a minha prima de três anos (vide as piadas que ele chama de "comaprações"), mas escrever uma bobeira como esta:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);font-family:Verdana,Geneva,Arial,Helvetica,sans-serif;font-size:85%;"  &gt;&lt;span style="font-size:85%;"&gt;&lt;span  lang="PT-BR" style="color:red;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);font-family:Verdana,Geneva,Arial,Helvetica,sans-serif;font-size:85%;"  &gt;&lt;span style="font-size:85%;"&gt;&lt;span  lang="PT-BR" style="color:red;"&gt;O Miguel Icaza, dono da Ximian e “patrono” do Mono botou vários milhões de dólares no bolso e virou vice-presidente da Novell. Eu o encontrei algumas semanas depois em uma festa patrocinada pela Microsoft em Los Angeles e o ele sorria sem parar, feito bobo. Para ele sem dúvida valeu muito à pena. Já não sei o que acham o bando de patos que trabalhou de graça para que ele pudesse ficar rico. Como costumo dize, Open Source no software dos outros é refresco. Até hoje não sei o que a Novell vai fazer com isso.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;É de lascar. Mas é claro, Redmond destrói a concorrência, seja ela quem for. O engraçado é o "&lt;span style="font-weight: bold; color: rgb(0, 0, 0);font-family:Verdana,Geneva,Arial,Helvetica,sans-serif;font-size:85%;"  &gt;&lt;span style="font-size:85%;"&gt;&lt;span  lang="PT-BR" style="color:red;"&gt;Até hoje não sei o que a Novell vai fazer com isso&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;". O que ele quis dizer com isso, que .Net fora do Windows não vai rpestar e que a Novell comprou a Ximian (e de quebra o Mono) a toa?&lt;br /&gt;&lt;br /&gt;Não posso dizer que toda comunicação &lt;span style="font-style: italic;"&gt;Microsoft x Mono&lt;/span&gt; é assim (principalmente porque esse autor já mostrou que não é referência para nada), e me parece que não, mas da opinião de quem tá de fora e lê um treco desse...putz grilo.&lt;br /&gt;&lt;br /&gt;Voltando ao ponto, quem usa Mono? As vezes eu tenho a impressão que eles estão produzindo uma super-plataforma, muito melhor que o próprio .Net, mas que só vai estar pronta quando tudo que conhecemos hoje por programação já estiver obsoleto. Note: eu não sou tão tapado assim, eu sei que as implementações dos caras funcionam e não duvido que sejam boas (eu uso Gnome/GTK, não duvidaria do Icaza &amp; crew), mas quem usa isso?&lt;br /&gt;&lt;br /&gt;Procurar por &lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt;Mono&lt;/span&gt;&lt;/span&gt; na Novell dá mil e poucos hits, &lt;span style="font-style: italic; font-weight: bold;"&gt;Java &lt;/span&gt;dá quase 21 mil &lt;span style="font-style: italic; font-weight: bold;"&gt;.Net&lt;/span&gt; dá uns 14 mil.&lt;br /&gt;&lt;br /&gt;Eu sinceramente nunca vi sentido no projeto Mono. Criar uma plataforma 100% livre? Ótimo, temos Python, Ruby florescendo e tantas tantas tantas outras. Por que algo Microsoft? Entretanto, nunca tive dúvidas da competência técnica da equipe.&lt;br /&gt;&lt;br /&gt;Eu acho que o Mono aidna não pegou, e não vai pegar, porque:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;   &lt;li&gt;A Microsoft acha interessante ter o Mono para dizer ".Net é padronizado, qualquer um faz uma implementação", mas comercialmente não interessa haver Mono&lt;/li&gt;   &lt;li&gt;Programador .Net não tem cultura de OSS. Tem cultura de comprar/crackear componente.&lt;/li&gt;   &lt;li&gt;Muita gente ainda vincula e vinculará sempre .Net com Windows. Mono nos celulares pode ser uma saída interessante.&lt;/li&gt;   &lt;li&gt;A comunidade OSS está pouco se lixando para Mono&lt;br /&gt; &lt;/li&gt; &lt;/ol&gt;&lt;br /&gt;Claro que isso tudo é &lt;span style="font-weight: bold;"&gt;minha opinião&lt;/span&gt; (e esse blog é meu, desculpa mas eu tenho ireito de escrever minha opinião aqui ;) ), de alguém que não trabalha com .Net/Mono nem conhece a plataforma muito de perto. Antes de me xingarem, prestem atenção nesta última frase e vejam se conseguem aproveitar o feedback.&lt;br /&gt;&lt;br /&gt;Afinal, esse post foi uma pergunta.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6820798-112770251431923075?l=pcalcado.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pcalcado.blogspot.com/feeds/112770251431923075/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6820798&amp;postID=112770251431923075&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112770251431923075'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112770251431923075'/><link rel='alternate' type='text/html' href='http://pcalcado.blogspot.com/2005/09/mono-quem-usa.html' title='Mono: Quem Usa?'/><author><name>Shoes</name><uri>http://www.blogger.com/profile/10271507933128080345</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.guj.com.br/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6820798.post-112758015278096140</id><published>2005-09-24T13:09:00.000-03:00</published><updated>2005-09-24T13:42:35.273-03:00</updated><title type='text'>Orkut: Brasileiros + Internet = SPAM</title><content type='html'>&lt;a href="http://www.orkut.com/Profile.aspx?uid=2401274391088317157"&gt;Eu &lt;/a&gt;entrei no Orkut antes dele virar febre nacional, convidado pelo Carlos ou Daniel, não lembro ao certo. Naquela época a graça era entrar em comunidades, porque nem tinha tanta gente conhecida assim.&lt;br /&gt;&lt;br /&gt;Com o passar dos dias, fui recebendo milhares de milhares de mensagens nas lsitas das comunidades que... faziam spam de outras comunidades. Desabilitei todos os avisos por email e faz quase um ano que não olho se tenho mensagens novas. Nem quero olhar. Uma funcionalidade legal do portal foi pro saco pelo instinto spammer da humanidade.&lt;br /&gt;&lt;br /&gt;Agora o yakult é febre, e temos mais spammers, desta vez no scrapbook. Muita gente divulgando comunidades idiotas, ou nem tão idiotas mas que eu não me interessaria (o que alguém ganha com várias pessoas numa comunidade? Tem prêmio? "Traga 10 amigos e a sua entrada na comunidade é grátis"?).&lt;br /&gt;&lt;br /&gt;Perfis falsos com figuras de meninas bonitas (incluindo a quase internet porn star &lt;span style="font-style: italic;"&gt;Maria das Graças&lt;/span&gt;) mandando ASCII art (ah, as pessoas acham que ASCII art é novidade agora também. Internet deveria ser banida de alguns círculos) de sites idiotas com coisas idiotas. Enfim, um festim de spammers.&lt;br /&gt;&lt;br /&gt;O que mais me impressionava é que como a coisa é amadora e programadores com meio cérebro não costumam fazer essas coisas, isso tudo devia ser feito na mão. Haja saco! Aí vi que apesar de muitos deles ainda serem manuais, já &lt;a href="http://www.google.com.br/search?ie=UTF-8&amp;oe=UTF-8&amp;amp;hl=pt-BR&amp;meta=lr%3Dlang_pt&amp;amp;q=Programa%20Flood%20Tudo%201.2%29"&gt;existem programas&lt;/a&gt; populares para fazer isso a venda por "míseros" R$44,00.&lt;br /&gt;&lt;br /&gt;Esta semana eu recebi propaganda de uma marcenaria em São Paulo(!), comunidades "de pegação", de marombeiros (eu com meus 65kg ia fazer o que lá? Limpar o chão?),  uma loja online de camisetas (!!), diga não ao desarmamento (com os velhos argumentos ridículos "só os bandidos terão armas". Você tem arma em casa? Eu não e todos que conheço que têm arrumaram com "amigos", não compraram nas lojas)... e muitos outros.&lt;br /&gt;&lt;br /&gt;Por enquanto eu tenho me dado ao trabalho de entrar nos perfis, "report as bogus", depois "ignore user", mas como não vejo nada acontecer, mandei umas mensagens de feedback (incluindo links dos programas). Se realmente isso não parar em breve (o que é o mais provável) vou desabilitar as notificações e parar de olhar meu scrapbook.&lt;br /&gt;&lt;br /&gt;Note que há um jeito fácil de achar os spammers, mesmo de perfil falso: quem os convidou para entrar no orkut? Mesmo que não houvesse, basta adicionar alguns mecanismos, como aquela maldita imagem de confirmação que operadoras de telefonia usam pra mandar SMS (mais uma incoveniência que os spammers nos trazem).&lt;br /&gt;&lt;br /&gt;Já não entro nas minhas comunidades, já não recebo mensagens... pra que vou ficar no Orkut?&lt;br /&gt;&lt;br /&gt;Engraçado que no &lt;a href="http://www.orkut.com/ScrapBook.aspx?uid=11098132481782423988"&gt;scrapbook de um dos perfis falsos&lt;/a&gt; eu encontrei várias mensagens com propagandas. Gente querendo que uma loja de camisetas entre na sua comunidade.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6820798-112758015278096140?l=pcalcado.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pcalcado.blogspot.com/feeds/112758015278096140/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6820798&amp;postID=112758015278096140&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112758015278096140'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112758015278096140'/><link rel='alternate' type='text/html' href='http://pcalcado.blogspot.com/2005/09/orkut-brasileiros-internet-spam.html' title='Orkut: Brasileiros + Internet = SPAM'/><author><name>Shoes</name><uri>http://www.blogger.com/profile/10271507933128080345</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.guj.com.br/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6820798.post-112750556981770670</id><published>2005-09-23T16:56:00.000-03:00</published><updated>2005-09-23T16:59:29.823-03:00</updated><title type='text'>Conexão Java 2005: Palestras Gravadas</title><content type='html'>A Anhembi Morumbi gravou o áudio e os slides de algumas das palestras (todas do salão principal) do Conexão java 2005. &lt;a href="http://www.conexaojava.com.br/conexaojava05/programacao.jsp"&gt;Confira aqui&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Agora vocês vão poder ouvir o já criticado nervosismo deste "carioca" que vos escreve com seus próprios ouvidos :)&lt;br /&gt;&lt;br /&gt;PS.: não reconheci minha voz :P Realmente eu estava &lt;span style="font-weight: bold;"&gt;muito&lt;/span&gt; nervoso.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6820798-112750556981770670?l=pcalcado.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pcalcado.blogspot.com/feeds/112750556981770670/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6820798&amp;postID=112750556981770670&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112750556981770670'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112750556981770670'/><link rel='alternate' type='text/html' href='http://pcalcado.blogspot.com/2005/09/conexo-java-2005-palestras-gravadas.html' title='Conexão Java 2005: Palestras Gravadas'/><author><name>Shoes</name><uri>http://www.blogger.com/profile/10271507933128080345</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.guj.com.br/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6820798.post-112658467885281901</id><published>2005-09-13T01:07:00.000-03:00</published><updated>2005-09-14T18:16:46.073-03:00</updated><title type='text'>Palestra do RioJUG: Arquivos Disponíveis</title><content type='html'>Muito legal a palestrinha ontem no RioJUG. Os arquivos estão &lt;a href="http://groups.yahoo.com/groups/riojug"&gt;no site da lista no Yahoo!&lt;/a&gt; (requer cadastro).&lt;br /&gt;&lt;br /&gt;Muito obrigado a quem foi ou desejou boa sorte, em especial ao pessoal do GUJ. Falei com o Douglas rapidamente,c rieio que o Marcelo tavares estava lá também mas não falou comigo (pelo menos esse nome estava na lista...). Obrigado ao Renato, que &lt;span style="font-weight: bold;"&gt;enfim&lt;/span&gt; apareceu. Agora só o ironlyxx que não existe... :P&lt;br /&gt;&lt;br /&gt;Para quem não foi, da compilação da palestra no RioJUG e workshop no CJ2005 deve sair um artigo. Só preciso respirar um pouco...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Update: &lt;/span&gt;&lt;span style="font-style: italic;"&gt;Esqueci um fato marcante. Entre meus amigos ex-colegas de trabalho que estavam lá, fiquei honrado com a presença do melhor programador C++ e benchmarker que conheço, famoso por achar java a coisa mais lenta depois do Aterro do Flamengo no Rush. Não é que o Gabriel me acaba ganhando a assinatura da Java Magazine que é dada de brinde nas reuniões? &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6820798-112658467885281901?l=pcalcado.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pcalcado.blogspot.com/feeds/112658467885281901/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6820798&amp;postID=112658467885281901&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112658467885281901'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112658467885281901'/><link rel='alternate' type='text/html' href='http://pcalcado.blogspot.com/2005/09/palestra-do-riojug-arquivos-disponveis.html' title='Palestra do RioJUG: Arquivos Disponíveis'/><author><name>Shoes</name><uri>http://www.blogger.com/profile/10271507933128080345</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.guj.com.br/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6820798.post-112623509755525645</id><published>2005-09-08T23:51:00.000-03:00</published><updated>2005-09-09T00:04:57.563-03:00</updated><title type='text'>Rapidinhas: Mentadrenalina</title><content type='html'>Continuando os posts dessa noite, vamos com rapidinhas e não tão rapidinhas.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 153, 153);"&gt;Você já avaliou um &lt;/span&gt;&lt;a style="color: rgb(51, 153, 153);" href="http://www.conexaojava.com.br/conexaojava05/"&gt;CJ2005&lt;/a&gt;&lt;span style="color: rgb(51, 153, 153);"&gt;? O feedback está sendo bem interessante. Do minicurso/workshop todos que falaram falaram bem, mas do debate que participei teve quem meteu o sarrafo no "carioca" (ps.: carioca não sou &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(51, 153, 153);"&gt;fluminense&lt;/span&gt;&lt;span style="color: rgb(51, 153, 153);"&gt; ou &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(51, 153, 153);"&gt;niteroiense&lt;/span&gt;&lt;span style="color: rgb(51, 153, 153);"&gt; se preferir!) e quem colocou como um dos pontos legais.&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(51, 153, 153);"&gt;O feedback negativo me foi extremamente útil. Eu sinceramente acho que as pessoas que comentaram algo comentaram o que acharam, não quiseram apenas falar mal, e isso é bom para eu tentar corrigir algumas coisas. Feedback positivo não diz muito o que fazer além de continuar fazendo o que faz, mas é ótimo :)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Na segunda-feira tenho palestra na &lt;a href="http://www.riojug.org/"&gt;RioJUG&lt;/a&gt;, voltar ao assunto do CJ2005. Camadas: como fazer, como não fazer, padrões legais, padrões ruins... uma discussão sobre o tema. Eu vejo muitos problemas com estes cocneitos, e osto de tentar mostrar a minha visão. Nem certa, nem errada, &lt;span style="font-weight: bold;"&gt;minha&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 153, 153);"&gt;Semana passada eu terminei minha primeira aplicação real com o controverso &lt;/span&gt;&lt;a style="color: rgb(51, 153, 153);" href="http://mentawai.lohis.com.br/"&gt;Mentawai&lt;/a&gt;&lt;span style="color: rgb(51, 153, 153);"&gt;. Estou conversando com o Sérgio sobre as mudanças que eu fiz, mas foi bem elgal. Era uma aplicação web pequena, para uma das maiores empresas do Brasil, utilizando Java 5, Spring e Hibernate 3. Pro Carlos Santiago, que me perguntou sobre o Menta &lt;a href="http://www.haloscan.com/comments/pcalcado/112552511816783415/#62270"&gt;alguns posts atrás&lt;/a&gt;, eu fiz uns filtros de integração Spring x Mentawai, ficou razoável. Eu acredito que seja uma opção viável para aplicações típicas web, que são a grande maioria. As features de Display-tags estão evoluindo, podem ainda não estar no nível desejado. Claor que toda ajuda é bem-vinda ;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Como falei antes (já tá ficando chato...) mudei de emprego. Só não lembro se falei que também mudei de área, saindo de GSM/telecom para Risk Management e Trading Systems (não sei como traduzir isso direito :P) áreazinha interessante e complexa pra cacete.&lt;br /&gt;&lt;br /&gt; &lt;a style="color: rgb(51, 153, 153);" href="http://www.haloscan.com/comments/pcalcado/112552511816783415/#62270"&gt;Peguntado pelo Rafael&lt;/a&gt;&lt;span style="color: rgb(51, 153, 153);"&gt;, além do Pro Spring, eu recomendo os livros do Rod Johnson e a leitura do guia de referência no Site do Projeto, tem muita coisa boa lá. O fórum também é bom&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6820798-112623509755525645?l=pcalcado.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pcalcado.blogspot.com/feeds/112623509755525645/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6820798&amp;postID=112623509755525645&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112623509755525645'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112623509755525645'/><link rel='alternate' type='text/html' href='http://pcalcado.blogspot.com/2005/09/rapidinhas-mentadrenalina.html' title='Rapidinhas: Mentadrenalina'/><author><name>Shoes</name><uri>http://www.blogger.com/profile/10271507933128080345</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.guj.com.br/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6820798.post-112623412106466401</id><published>2005-09-08T23:46:00.000-03:00</published><updated>2005-09-08T23:51:35.316-03:00</updated><title type='text'>Programaodres e Drag...não feche a janela ainda!!!</title><content type='html'>Pra quem não sabe, &lt;a href="http://www.fmeyer.org/blog/?p=2"&gt;esse texto que vocês e eu já recebemos dezenas de vezes&lt;/a&gt; é do Fernando Meyer, o scottys do GUJ, com o Daniel Quirino e Marihelen. Achei legal informar isso aqui, pode ser que alguém não saiba e eu acho uma puta sacanagem nem um link pro blog do cara colocarem.&lt;br /&gt;&lt;br /&gt;Daqui a pouco vão dizer que é do Veríssimo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6820798-112623412106466401?l=pcalcado.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pcalcado.blogspot.com/feeds/112623412106466401/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6820798&amp;postID=112623412106466401&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112623412106466401'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112623412106466401'/><link rel='alternate' type='text/html' href='http://pcalcado.blogspot.com/2005/09/programaodres-e-dragno-feche-janela.html' title='Programaodres e Drag...não feche a janela ainda!!!'/><author><name>Shoes</name><uri>http://www.blogger.com/profile/10271507933128080345</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.guj.com.br/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6820798.post-112623388490451542</id><published>2005-09-08T23:12:00.000-03:00</published><updated>2005-09-08T23:44:47.036-03:00</updated><title type='text'>Como não construir uma Comunidade</title><content type='html'>Eu sempre fui um cara mais pratico e menos poitico com respeito a JUGs. Dessa vez, nao vou poder deixar de falar.&lt;br /&gt;&lt;br /&gt;É pertubador (apesar de nao ser nada estranho ou imprevisível) que pessoas que falam tanto, o tempo todo, em comundiade, como &lt;a href="http://www.soujava.org.br/jsp/index.jsp"&gt;SãoJava&lt;/a&gt;, haja de uma forma tão peculiar.&lt;br /&gt;&lt;br /&gt;Para quem ainda não sabe, SãoJava aportou no Rio de Janeiro com JUG e templo próprios. Mais um JUG no Rio? &lt;span style="font-weight: bold;"&gt;ÓTIMO!&lt;/span&gt; Acho que depois de bater um papo comigo ou ler uns posts neste blog dá pra perceber que eu me preocupo com o esvaziamento do Estado, e não é coisa de bonzinho não, eu simplesmente não quero ser obrigado a me mudar do lugar que quero ficar por não ter opções.&lt;br /&gt;&lt;br /&gt;Este não é o segundo JUG no Rio, existem outros de empresas, universidades ou em outras cidades do Estado. De uma maneira maior ou menor, eles sempre cooperaram, ou pelo menso não competiram. Divulgaram e lutaram pelas mesmas coisas. Realmente o estado precisa de mais movimento, mais JUGs, mas alguém que teoricamente preza tanto a tal "Comunidade Java" resolve criar um grupo paralelo e independente, sem buscar qualquer tipo de aproximação. É simplesmente ridículo este clima de competição entre ONGs, &lt;span style="font-weight: bold;"&gt;se&lt;/span&gt; ninguém ganha nada com isso, a não ser o fortalecimento da tal Comunidade, pra que essas coisas SãoJava? Por que não unir ao invés de separar? Agir em conjunto? Dialogar? Vou consultar o código canônico pra ver se santo se contradiz.&lt;br /&gt;&lt;br /&gt;Se fosse o José das Couves ali da esquina, eu não ia achar nada. Só acho que depois de encher tanto o saco com palestras, artigos, spam, bandeirinhas do Brasil, gritinhos e palminhas e todo o marketing sobre a tal "Comunidade de Desenvolveores Java Brasileira", eu perdi alguma coisa. Vai ver no meio da gritaria eles deixaram claro e eu não ouvi, a "comunidade" é a &lt;span style="font-weight: bold;"&gt;comunidade deles&lt;/span&gt;. Afinal, eles SãoJava.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6820798-112623388490451542?l=pcalcado.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pcalcado.blogspot.com/feeds/112623388490451542/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6820798&amp;postID=112623388490451542&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112623388490451542'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112623388490451542'/><link rel='alternate' type='text/html' href='http://pcalcado.blogspot.com/2005/09/como-no-construir-uma-comunidade.html' title='Como não construir uma Comunidade'/><author><name>Shoes</name><uri>http://www.blogger.com/profile/10271507933128080345</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.guj.com.br/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6820798.post-112552511816783415</id><published>2005-08-31T17:40:00.000-03:00</published><updated>2005-08-31T18:51:58.216-03:00</updated><title type='text'>Spring em Ação</title><content type='html'>Não, não é lançamento de livro em português, não &lt;span style="font-style: italic;"&gt;ainda &lt;/span&gt;(agradeçam, esse livro não é legal e não vale a grana).&lt;br /&gt;&lt;br /&gt;Está acontecendo mais uma vez. Assim como com o Struts, o Spring está ganhando a luz do dia nas empresas após ganhar força na comunidade (e, assim como o Struts, em algum tempo perceberemos que podemos fazer &lt;span style="font-style: italic;"&gt;bem&lt;/span&gt; melhor...).&lt;br /&gt;&lt;br /&gt;Para quem (ainda) não sabe, o Spring é um container leve (&lt;span style="font-style: italic;"&gt;container leve&lt;/span&gt; é um conceito vasto, mas neste caso quer dizer um container de POJOs, segundo o time do Spring). Com ele você pode ter praticamente todos os benefícios de Java Enterprise Edition (JCA, JTA, Servlets, Pools, JMS, TMX, JavaMail, JDBC...) sem utilizar EJBs. Você não precisava de EJBs para usar estas coisas, mas geralmente as pessoas se apegavam a estes  por serem a maneira "mais fácil" de lidar com os outros recursos.&lt;br /&gt;&lt;br /&gt;O Spring provê uma API fácil e bem utilizável para utilizar estes recursos, mantendo seus objetos independente destes com um bom uso de AOP (que é facilmente configurável por qualquer um).&lt;br /&gt;&lt;br /&gt;O problema atual do Spring é como é chato configurar seu XML. A semântica do negócio é simples, mas é muito ruim ter que digitar aquilo tudo (não me apontem uma ferramenta, não é isso que torna as cosias produtivas), mas ainda assim é *muito* mais simples que configurar EJBs e seus descritores, interfaces, pools, JNDI names e tudo mais, fora as gambiarras como &lt;span style="font-family: courier new;"&gt;Service Locators&lt;/span&gt; e &lt;span style="font-family: courier new;"&gt;Business Delegates&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Existe um velho refrão que diz algo como &lt;span style="font-style: italic; font-weight: bold;"&gt;Não use um canhão para matar uma mosca&lt;/span&gt;. Esta frase mais que sábia diz muito sobre quando usar EJBs (praticamente nunca), mas também tem suas complicações.&lt;br /&gt;&lt;br /&gt;Um caso típico é o de programas em ASP clássico/PHP/CGI. Estas plataformas são extremamente limitadas para aplicações de grande porte, praticamente qualquer integração com middleware é feita por banco de dados (bleargh) ou hoje em dia por XML sobre HTTP. Eu trabalhei muito tempo com ASP, e quando estava estudando minha diversão era fazer cosias improváveis, como editores de texto completos, editores de vídeo e outras coisinhas complexas em ASP puro (não adianta usar componentes, muitas vezes você não consegue instalá-los no servidor do cliente).&lt;br /&gt;&lt;br /&gt;E ficava aquela gambiarrada toda. Trocas de mensagens através de tabelas no SGBD, arquivos temporários de download... etc. Esse é o caso contrário do ditado que acabei de falar, neste caso podemos aplicar o refrão: &lt;span style="font-style: italic; font-weight: bold;"&gt;Não use um mata-moscas para matar um mamute&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Existem aplicações que não são mamutes, não são moscas, mas ainda assim precisam de algum suporte de plataformas coorporativas, como transacionamento XA, pools, conectores, ciclo de vida controlados, mensageria... a maioria das aplicações que são mais que um simples site de Internet tem pelo menos uma dessas necessidades. Neste cenário, coisas como o Spring são perfeitas, você usa apenas o que precisa, não precisa &lt;a href="http://today.java.net/lpt/a/101"&gt;engolir o elefante de novo&lt;/a&gt; para usar o que quer.&lt;br /&gt;&lt;br /&gt;Neste cenário, fica mais fácil produzir aplicações Orientadas a Objetos de verdade, sem as aberrações de BusinessDelegates/SessionFaçade/ServiceLocator/DTO/TO/VO que vieram trazer alguma usabilidade aos EJBs. Mas se você é amigo dos EJBs, ou realmente tem um caso onde els são úteis (chamadas RMI são um dos raros exemplos), pode continuar utilizando sua plataforma.&lt;br /&gt;&lt;br /&gt;Se você está no mercado, estude Spring. Provavelmente quando a sua empresa for enfim usar haverá coisa melhor, mas por enquanto, essa é a opção mais sensata para aplicações médias. Não que paltaformas como &lt;a href="http://www.picocontainer.org/"&gt;Pico&lt;/a&gt;/&lt;a href="http://www.nanocontainer.org/"&gt;Nano Container&lt;/a&gt; sejam ruins, pelo contrário, só que o Spring tem maior suporte e um apaltaforma mais vasta, cobrindo muita coisa que você precisa hoje.&lt;br /&gt;&lt;br /&gt;A fila anda...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6820798-112552511816783415?l=pcalcado.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pcalcado.blogspot.com/feeds/112552511816783415/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6820798&amp;postID=112552511816783415&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112552511816783415'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112552511816783415'/><link rel='alternate' type='text/html' href='http://pcalcado.blogspot.com/2005/08/spring-em-ao.html' title='Spring em Ação'/><author><name>Shoes</name><uri>http://www.blogger.com/profile/10271507933128080345</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.guj.com.br/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6820798.post-112542745883076735</id><published>2005-08-30T15:20:00.000-03:00</published><updated>2005-08-30T15:44:20.146-03:00</updated><title type='text'>WebLogic &amp; Mercado Carioca</title><content type='html'>Dois assuntos que tem muito pouco a ver, mas me ocorreram hoje.&lt;br /&gt;&lt;br /&gt;A coordenação do &lt;a href="http://www.riojug.org"&gt;RioJUG&lt;/a&gt; foi convidada junto com clientes e parceiros para uma demonstração do novo &lt;a href="http://www.bea.com/framework.jsp?CNT=index.htm&amp;FP=/content/products/weblogic"&gt;Bea WebLogic 9 &lt;/a&gt;(aquele com o diabinho que parece desenhado pelo mesmo cara que desenhou o Tomcat, confira abaixo).&lt;br /&gt;&lt;br /&gt;Eu considero a Bea uma empresa muito razoável no que faz, e pela apresentação a nova versão do WebLogic traz coisas muito, muito, muito legais, como possibilidade de rodar duas instâncias de uma mesma aplicação com versões diferentes, configuração atômica (nada de urânio, plutônio ou deuteronômio, apenas transacional) e scripting.&lt;br /&gt;&lt;br /&gt;Eu tenho um pet project que não avançou muito de colocar um Shell no JBoss. Onde eu trabalhava (já falei que mudei de emprego?) isso era muito útil, principalmente acessando máquinas dos clientes via uma VPN fedorenta, tendo que atravessar mil servidores para chegar na máquina de produção... enfim. A minha alternativa (como o que pretendo no &lt;a href="https://funky.dev.java.net/"&gt;Funky&lt;/a&gt;) é algo independente da linguagem, mas bem focada em &lt;a href="http://groovy.codehaus.org/"&gt;Groovy&lt;/a&gt; (&lt;a href="http://www.beanshell.org/"&gt;BeanShell &lt;/a&gt;é legal também).&lt;br /&gt;&lt;br /&gt;Eu estava ansioso por saber como é o &lt;a href="http://e-docs.bea.com/wls/docs90/notes/new.html#1221468"&gt;scripting do WL&lt;/a&gt;, e não é que eles usam...&lt;span style="font-weight: bold;"&gt;Python&lt;/span&gt;! Pelo que o cara de marketing falou (aliás, pausa aqui: O cara de marketing era muito, mas muito mesmo mais técnico que todos os outros que já conheci, seja da IBM, Sun, Microsoft, Novell...o cara deu um parecer técnico-porém-marketeiro muito legal) que ele roda sobre &lt;a href="http://www.jython.org/"&gt;Jython&lt;/a&gt;. Não tive a chance de perguntar o porque, vou pesquisar por aí, alguém sabe de algo?&lt;br /&gt;&lt;br /&gt;Não me entendam mal, Python é legal, a Bea investir em algo aberto como Jython é legal... mas o JCP está padronizando três linguagens de script (&lt;a href="http://www.jcp.org/en/jsr/detail?id=241"&gt;Groovy&lt;/a&gt;, &lt;a href="http://www.jcp.org/en/jsr/detail?id=274"&gt;BeanShell &lt;/a&gt;e &lt;a href="http://jcp.org/en/jsr/detail?id=223"&gt;JavaScript&lt;/a&gt;), pra que uma tão &lt;span style="font-style: italic;"&gt;alienígena&lt;/span&gt;?&lt;br /&gt;&lt;br /&gt;Eles estão trabalhando junto com o Rod Johnson para prover um suporte melhor ao Spring que outros AS. Vamos ver...&lt;br /&gt;&lt;br /&gt;Eu curto o estilo deles. Tá certo que tudo que a Bea faz é comprar empresas que fazem algo legal (Tuxedo, WebLogic...), mas eu curto. Apesar disso, ainda sou adepto ao JBoss, mas num ambiente onde software-livre não entra, seria minha primeira escolha.&lt;br /&gt;&lt;br /&gt;O problema da Bea é tentar vender toda aquela parafernalha quase-RAD com Workshop, Beehive, portal, blablabla. O velho truque de vender ferramentas que vão esconder o fato dos seus "profissionais" serem apertadores de parafuso. Vão mesmo?&lt;br /&gt;&lt;br /&gt;Ah, o logo:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img style="width: 504px; height: 127px;" alt="A imagem “http://contact2.bea.com/bea/www/diablo/banner_diablo_dnload.gif” contém erros e não pode ser exibida." src="http://contact2.bea.com/bea/www/diablo/banner_diablo_dnload.gif" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;Gostei da audácia do slogan, parece coisa do &lt;a href="http://www.winamp.com"&gt;WinAmp&lt;/a&gt; :)&lt;br /&gt;&lt;br /&gt;Só eu que acho eles parecidos?&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img alt="A imagem “http://www.javaportal.it/images/NEWSS5/diablo.gif” contém erros e não pode ser exibida." src="http://www.javaportal.it/images/NEWSS5/diablo.gif" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img alt="A imagem “http://jakarta.apache.org/tomcat/images/tomcat.gif” contém erros e não pode ser exibida." src="http://jakarta.apache.org/tomcat/images/tomcat.gif" /&gt;&lt;br /&gt;&lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt;Nota:&lt;/span&gt;&lt;/span&gt; Não ganhei comissão (aidna, ao menos) por este post. Na verdade não ganhei nem um CDzinho demo do Diablo :(&lt;br /&gt;&lt;br /&gt;Por último, conversando com as pessoas no evento, vi o que já é fato conhecido: está todo mundo procurando desenvolvedor no Rio. Você não acha ninguém bom sem emprego e/ou ganhando pouco.&lt;br /&gt;&lt;br /&gt;Achar um profissional JSP+JavaBean é mole. Profissional razoável? Prepare-se para gastar uma grana. Profissional bom? Conheço gente que está procurando ha um ano, literalmente. O emrcado aqueceu e os desenvolvedores sumiram... cadê vocês?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6820798-112542745883076735?l=pcalcado.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pcalcado.blogspot.com/feeds/112542745883076735/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6820798&amp;postID=112542745883076735&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112542745883076735'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112542745883076735'/><link rel='alternate' type='text/html' href='http://pcalcado.blogspot.com/2005/08/weblogic-mercado-carioca.html' title='WebLogic &amp; Mercado Carioca'/><author><name>Shoes</name><uri>http://www.blogger.com/profile/10271507933128080345</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.guj.com.br/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6820798.post-112506688291612273</id><published>2005-08-26T09:27:00.000-03:00</published><updated>2005-08-26T11:34:42.920-03:00</updated><title type='text'>Avaliação CJ2005</title><content type='html'>Você que foi no CJ2005 não deixe de&lt;a href="http://www.conexaojava.com.br/conexaojava05/avaliacao.jsp"&gt; preencher a ficha de avaliação&lt;/a&gt;. Desta forma teremos um evento aida melhor ano que vem ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6820798-112506688291612273?l=pcalcado.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pcalcado.blogspot.com/feeds/112506688291612273/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6820798&amp;postID=112506688291612273&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112506688291612273'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112506688291612273'/><link rel='alternate' type='text/html' href='http://pcalcado.blogspot.com/2005/08/avaliao-cj2005.html' title='Avaliação CJ2005'/><author><name>Shoes</name><uri>http://www.blogger.com/profile/10271507933128080345</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.guj.com.br/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6820798.post-112505634258257817</id><published>2005-08-26T08:37:00.000-03:00</published><updated>2005-08-26T08:45:16.723-03:00</updated><title type='text'>Camadas na Reunião Mensal do RioJUG</title><content type='html'>Como falei aqui, vou falar um pouco sobre Camadas na reunião mensal do &lt;a href="http://www.riojug.org/"&gt;RioJUG&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Para quem se itneressar, a entrada é gratuita e não é necessário fazer  pré-inscrição, basta aparecer por lá ;)&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;&lt;b&gt;&lt;span style=";font-family:Verdana;font-size:100%;"  &gt;&lt;span style=";font-family:Verdana;font-size:12;"  &gt;Arquitetura de Camadas em Java Enterprise Edition&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;     &lt;h5&gt;&lt;b&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;&lt;span style=";font-family:Verdana;font-size:10;"  &gt;por Phillip    Calçado&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h5&gt;     &lt;p&gt;&lt;b&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;&lt;span style="font-weight: bold;font-family:Verdana;font-size:10;"  &gt;Dia:&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;&lt;span style=";font-family:Verdana;font-size:10;"  &gt; 12/Setembro/2005 (segunda)&lt;br /&gt;&lt;b&gt;&lt;span style="font-weight: bold;"&gt;Horário:&lt;/span&gt;&lt;/b&gt; 19:00 horas&lt;br /&gt;&lt;b&gt;&lt;span style="font-weight: bold;"&gt;Local:&lt;/span&gt;&lt;/b&gt; Auditório do SENAC - Rua   Santa Luzia, 735/7º andar&lt;br /&gt;&lt;b&gt;&lt;span style="font-weight: bold;"&gt;Dica de Acesso:&lt;/span&gt;&lt;/b&gt; Estação   Cinelândia do Metrô pela saída Santa Luzia, atrás do Consulado Americano&lt;br /&gt;&lt;b&gt;&lt;span style="font-weight: bold;"&gt;Entrada:&lt;/span&gt;&lt;/b&gt; Gratuita &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;     &lt;h5&gt;&lt;b&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;&lt;span style=";font-family:Verdana;font-size:10;"  &gt;A Palestra&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h5&gt;     &lt;p&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;&lt;span style=";font-family:Verdana;font-size:10;"  &gt;Algumas pessoas acreditam que uma aplicação Java   Enterprise Edition utiliza Camadas por si só.&lt;br /&gt;Outros acreditam que o Modelo MVC garante o uso de Camadas, muitos ainda nunca ouviram uma definição do que seriam as tais Camadas.&lt;br /&gt;Nesta breve apresentação, os conceitos de Camadas serão apresentados e discutidos no contexto de aplicações Java EE, incluindo novas tendências como IoC e AOP. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;     &lt;h5&gt;&lt;b&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;&lt;span style=";font-family:Verdana;font-size:10;"  &gt;O Palestrante&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h5&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;&lt;span style=";font-family:Verdana;font-size:10;"  &gt;Phillip    Calçado&lt;/span&gt;&lt;/span&gt; é JUG Leader do Grupo de   Usuários Java do Rio de Janeiro (&lt;a href="http://www.riojug.org/" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:12;"&gt;RioJUG&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;) e do &lt;a href="http://www.guj.com.br/" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:12;"&gt;GUJ&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;,   o maior fórum brasileiro sobre a tecnologia.&lt;br /&gt;&lt;p&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;&lt;span style=";font-family:Verdana;font-size:10;"  &gt; Programa em Java desde 2003 e já atuou nas áreas de previdência privada,   gestão de conteúdo, redes de telefonia e energia.&lt;br /&gt;Instrutor, coach, conferencista e escritor ocasional.&lt;br /&gt;Participa de projetos open-source e mantêm um site e blog em &lt;a href="http://www.fragmental.com.br/" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:12;"&gt;www.fragmental.com.br&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6820798-112505634258257817?l=pcalcado.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pcalcado.blogspot.com/feeds/112505634258257817/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6820798&amp;postID=112505634258257817&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112505634258257817'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112505634258257817'/><link rel='alternate' type='text/html' href='http://pcalcado.blogspot.com/2005/08/camadas-na-reunio-mensal-do-riojug.html' title='Camadas na Reunião Mensal do RioJUG'/><author><name>Shoes</name><uri>http://www.blogger.com/profile/10271507933128080345</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.guj.com.br/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6820798.post-112499695583165988</id><published>2005-08-25T15:53:00.000-03:00</published><updated>2005-08-25T16:09:48.683-03:00</updated><title type='text'>Conexão Java 2005 - Parte II: O Workshop</title><content type='html'>Olá,&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www1.folha.uol.com.br/fsp/ilustrad/fq2508200519.htm"&gt;Muito feliz&lt;/a&gt;, continuo o relato do &lt;a href="http://www.conexaojava.com.br/conexaojava05/"&gt;CJ2005 &lt;/a&gt;:)&lt;br /&gt;&lt;br /&gt;Eu dirigi o workshop &lt;span style="font-style: italic;"&gt;Aumente o QI dos seus objetos: camada de negócios de verdade com Spring&lt;/span&gt;, no domingo. O objetivo era mostrar como cosntruir uma aplicação focada na camada de negócios, sem usar DTOs e derivados, e de quebra aprender um pouco de Spring e IoC...enfim, o que descrevi &lt;a href="http://pcalcado.blogspot.com/2005/08/cj2005-esquentando-os-motores.html"&gt;aqui&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;O objetivo era levantar uma discussão e desenvolver o sistema em cima desta, mas como a turma era heterogênea, haviam pessoas com muita experiência e pessoas que nunca haviam visto Java. O CJ precisa definir tracks :(&lt;br /&gt;&lt;br /&gt;Então a parte mais teórica da apresentação foi legal, mas a parte prática foi prejudicada. Não conseguimos criar mais que o esqueleto de uma estória (um &lt;span style="font-style: italic;"&gt;casode uso&lt;/span&gt;) e não chegamos no Spring (problemas nos meus CDs e máquinas sem rede ajudaram também). A galera ficou frustrada :(&lt;br /&gt;&lt;br /&gt;Eu acredito que quem foi gostou, mas teria sido melhor um tutorial ou palestra. Ficou um mini-curso teórico demais para o gosto de qualquer um :P&lt;br /&gt;&lt;br /&gt;Em breve vou estar liberando aqui os slides e o código de exemplo, por enquanto os slides estão &lt;a href="http://www.guj.com.br/posts/list/29605.java"&gt;disponíveis no GUJ&lt;/a&gt; (em breve estarão também no site do evento).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6820798-112499695583165988?l=pcalcado.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pcalcado.blogspot.com/feeds/112499695583165988/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6820798&amp;postID=112499695583165988&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112499695583165988'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112499695583165988'/><link rel='alternate' type='text/html' href='http://pcalcado.blogspot.com/2005/08/conexo-java-2005-parte-ii-o-workshop.html' title='Conexão Java 2005 - Parte II: O Workshop'/><author><name>Shoes</name><uri>http://www.blogger.com/profile/10271507933128080345</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.guj.com.br/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6820798.post-112484973911583360</id><published>2005-08-23T23:14:00.000-03:00</published><updated>2005-08-23T23:15:39.120-03:00</updated><title type='text'>Rapidinhas: Olho nos Trilhos</title><content type='html'>Se voce nao levou a serio meu &lt;a href="http://pcalcado.blogspot.com/2005/07/hospedando-ruby-on-rails.html"&gt;post sobre Rails do outro dia&lt;/a&gt;, saiba que tem gente grande &lt;a href="https://www.sdn.sap.com/sdn/weblogs.sdn?blog=/pub/wlg/2111"&gt;de olho&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6820798-112484973911583360?l=pcalcado.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pcalcado.blogspot.com/feeds/112484973911583360/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6820798&amp;postID=112484973911583360&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112484973911583360'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112484973911583360'/><link rel='alternate' type='text/html' href='http://pcalcado.blogspot.com/2005/08/rapidinhas-olho-nos-trilhos.html' title='Rapidinhas: Olho nos Trilhos'/><author><name>Shoes</name><uri>http://www.blogger.com/profile/10271507933128080345</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.guj.com.br/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6820798.post-112481481514876922</id><published>2005-08-23T13:31:00.000-03:00</published><updated>2005-08-23T13:33:35.153-03:00</updated><title type='text'>Confirmado...?</title><content type='html'>&lt;a href="http://www.89fm.com.br/notas/?13844"&gt;Será&lt;/a&gt;?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6820798-112481481514876922?l=pcalcado.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pcalcado.blogspot.com/feeds/112481481514876922/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6820798&amp;postID=112481481514876922&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112481481514876922'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112481481514876922'/><link rel='alternate' type='text/html' href='http://pcalcado.blogspot.com/2005/08/confirmado.html' title='Confirmado...?'/><author><name>Shoes</name><uri>http://www.blogger.com/profile/10271507933128080345</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.guj.com.br/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6820798.post-112481330507722908</id><published>2005-08-23T12:51:00.000-03:00</published><updated>2005-08-23T13:11:03.133-03:00</updated><title type='text'>Conexão Java 2005 - Parte I: O Debate</title><content type='html'>Eu não ia conseguir falar sobre o &lt;a href="http://www.conexaojava.com.br/conexaojava05/"&gt;CJ2005 &lt;/a&gt;hoje, estou extremamente atarefado, mas vou ter que comentar algo.&lt;br /&gt;&lt;br /&gt;Para quem não sabe, o tal "TBC" (To be Confirmed) da grade no debate era eu. Fui chamado pelo &lt;a href="http://www.google.com/search?hl=en&amp;lr=&amp;amp;safe=off&amp;q=%22rafael+steil%22&amp;amp;btnG=Search"&gt;Rafael Steil&lt;/a&gt; e depois pelo louds (&lt;a href="http://www.google.com/search?hl=en&amp;q=%22rodrigo+kumpera%22&amp;amp;btnG=Google+Search"&gt;Rodrigo Kumpera&lt;/a&gt;) para participar do debate com o hammett, o &lt;a href="http://www.google.com/search?hl=en&amp;lr=&amp;amp;safe=off&amp;q=%22hamilton+verissimo%22&amp;amp;btnG=Search"&gt;Hamilton Veríssimo&lt;/a&gt;. Eu conhecia o hammet de nome, me parece que quando eu entrei definitivamente para a comunidade Java ele estava indo apra o .Net.&lt;br /&gt;&lt;br /&gt;A culpa por não ter meu nome no evento foi minha, que não consegui participar efetivamente da organização da atividade, mas enfim, rolou. Minha impressão é que foi muito bem.&lt;br /&gt;&lt;br /&gt;Antes de continuar, o Hamilton provou que é um profissional extremamente competente e confiante. Ele aceitou a proposta de participar de um evento sobre Java falando mal de .Net. Você faria isso com a sua tecnologia? Convidamos outras pessoas para compôr a mesa, mas ninguém teve coragem, por isso o debate foi 1 a 1.&lt;br /&gt;&lt;br /&gt;Para quem ainda não percebeu (tem gente muito lenta por aí..), o debate foi o contrário do normal (apelidamos carinhosamente de &lt;span style="color: rgb(153, 51, 0);font-family:courier new;" &gt;!debate&lt;/span&gt;). Eu meti o pau no Java e o hammett no .Net, a visão era de quem usa a tecnologia, não um cara xingando a mãe do outro que nem conhece.&lt;br /&gt;&lt;br /&gt;Parece que mesmo assim &lt;a href="http://br.thespoke.net/MyBlog/andreysanches/MyBlog_Comments.aspx?ID=29197"&gt;tem gente&lt;/a&gt; que prefere xingar tudo e todos sem entender. Questionam a qualificação técnica do participante (engraçado ler os comentários nos blogs depois que eles "descobrem" que o hammet é commiter de projetos super respeitados e autor de livro sobre ASP.Net...além de entender muito de Java) e até conceitos básicos de Ciência da Computação como listas ordenáveis.&lt;br /&gt;&lt;br /&gt;Pessoas que nem sequer foram no evento tentar desmerecer os participantes. Pessoas que foram e não repararam nem que o Rodrigo era o moderador, não participante, questionam.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;"Ah, é porque eles são de .Net, esse povinho é assim mesmo" &lt;/span&gt;...ah é? Na verdade eu ainda estou esperando reações parecidas do lado Java, &lt;span style="font-weight: bold;"&gt;bem&lt;/span&gt; parecidas.&lt;span style="font-weight: bold;"&gt; Muito&lt;/span&gt; parecidas.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;O Hamilton postou uma resposta de altíssimo nível no &lt;a href="http://jroller.com/comments/hammett/Weblog/hammett_s_being_bashed_by#comments"&gt;seu blog&lt;/a&gt;. Não sou indicado para falar de .Net (e por isso nem poderia participar dum debate &lt;span style="font-style: italic;"&gt;normal &lt;/span&gt;deste tipo),  mas acho que foi na mosca.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6820798-112481330507722908?l=pcalcado.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pcalcado.blogspot.com/feeds/112481330507722908/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6820798&amp;postID=112481330507722908&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112481330507722908'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112481330507722908'/><link rel='alternate' type='text/html' href='http://pcalcado.blogspot.com/2005/08/conexo-java-2005-parte-i-o-debate.html' title='Conexão Java 2005 - Parte I: O Debate'/><author><name>Shoes</name><uri>http://www.blogger.com/profile/10271507933128080345</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.guj.com.br/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6820798.post-112439719966848795</id><published>2005-08-18T17:29:00.000-03:00</published><updated>2005-08-18T17:33:19.676-03:00</updated><title type='text'>Groooooooooooooooooovy</title><content type='html'>Você tem que alterar os pacotes no import de 1000 arquivos. Opção? &lt;a href="http://www.gnu.org/software/sed/sed.html"&gt;sed&lt;/a&gt;, claro.&lt;br /&gt;&lt;br /&gt;No meu caso, acho que foi mais rápido escrever este scriptizinho em &lt;a href="http://groovy.codehaus.org"&gt;groovy &lt;/a&gt;do que ler as páginas de manual dos pipelines que teria que fazer.&lt;br /&gt;&lt;br /&gt; &lt;span style="font-family: courier new; color: rgb(102, 102, 0);"&gt;#!/usr/bin/env groovy&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="font-family: courier new; color: rgb(102, 102, 0);"&gt;new File(this.args[0]).eachFileRecurse(){&lt;/span&gt;&lt;br /&gt; &lt;span style="font-family: courier new; color: rgb(102, 102, 0);"&gt;    input -&gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="font-family: courier new; color: rgb(102, 102, 0);"&gt;    filename = input.getAbsolutePath();&lt;/span&gt;&lt;br /&gt; &lt;span style="font-family: courier new; color: rgb(102, 102, 0);"&gt;    output = new File(filename+".REPLACING");&lt;/span&gt;&lt;br /&gt; &lt;span style="font-family: courier new; color: rgb(102, 102, 0);"&gt;    if(!input.isDirectory() &amp;&amp;amp; (input.getName().matches("^.*java\$"))){&lt;/span&gt;&lt;br /&gt; &lt;span style="font-family: courier new; color: rgb(102, 102, 0);"&gt;    &lt;/span&gt;&lt;br /&gt; &lt;span style="font-family: courier new; color: rgb(102, 102, 0);"&gt;        println("#################   UPDATING FILE ["+ input.getAbsolutePath()+"] ##############################");&lt;/span&gt;&lt;br /&gt; &lt;span style="font-family: courier new; color: rgb(102, 102, 0);"&gt;         input.eachLine{&lt;/span&gt;&lt;br /&gt; &lt;span style="font-family: courier new; color: rgb(102, 102, 0);"&gt;            line -&gt; modified = line.replaceAll(this.args[1], (this.args[2]+"\n"));&lt;/span&gt;&lt;br /&gt; &lt;span style="font-family: courier new; color: rgb(102, 102, 0);"&gt;            output.append(modified)&lt;/span&gt;&lt;br /&gt; &lt;span style="font-family: courier new; color: rgb(102, 102, 0);"&gt;        }&lt;/span&gt;&lt;br /&gt; &lt;span style="font-family: courier new; color: rgb(102, 102, 0);"&gt;    }&lt;/span&gt;&lt;br /&gt; &lt;span style="font-family: courier new; color: rgb(102, 102, 0);"&gt;    input.delete();&lt;/span&gt;&lt;br /&gt; &lt;span style="font-family: courier new; color: rgb(102, 102, 0);"&gt;    output.renameTo(new File(filename));&lt;/span&gt;&lt;br /&gt; &lt;span style="font-family: courier new; color: rgb(102, 102, 0);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Ele recebe três parâmetros: [0] diretorio onde começar [1] regexp com linha a substituir [2] texto para colocar no lugar. Como sou newbie em &lt;a href="http://groovy.codehaus.org"&gt;Groovy&lt;/a&gt;, acho que dá pra melhorar muito...sugestões?&lt;br /&gt;&lt;br /&gt;(não o algoritmo em si, eu sei que tá uma merda, mas otimizar script que você vai usar uma vez na vida é um tanto quanto perda de tempo demais para mim, quero saber sintaxe e truques)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6820798-112439719966848795?l=pcalcado.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pcalcado.blogspot.com/feeds/112439719966848795/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6820798&amp;postID=112439719966848795&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112439719966848795'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112439719966848795'/><link rel='alternate' type='text/html' href='http://pcalcado.blogspot.com/2005/08/groooooooooooooooooovy.html' title='Groooooooooooooooooovy'/><author><name>Shoes</name><uri>http://www.blogger.com/profile/10271507933128080345</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.guj.com.br/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6820798.post-112432320112658393</id><published>2005-08-17T20:58:00.000-03:00</published><updated>2005-08-17T21:00:01.136-03:00</updated><title type='text'>Ouvindo</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;a href="javascript:openPopUp('/AllProdsBigImage.asp?Query=ProductPage&amp;ProdTypeId=2&amp;ProdId=1021278&amp;DisableTop=Y','images','width=466,height=450,status=no,scrollbars=yes,top=50,left=50')"&gt;   &lt;a href="http://www2.uol.com.br/loshermanos/"&gt;&lt;img src="http://i.s8.com.br/images/cds/cover/img8/1021278.jpg" name="mainImg" border="0" hspace="2" /&gt;&lt;/a&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;Cara, como eu rodei pra achar esse CD!&lt;br /&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/6820798-112432320112658393?l=pcalcado.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pcalcado.blogspot.com/feeds/112432320112658393/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6820798&amp;postID=112432320112658393&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112432320112658393'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112432320112658393'/><link rel='alternate' type='text/html' href='http://pcalcado.blogspot.com/2005/08/ouvindo.html' title='Ouvindo'/><author><name>Shoes</name><uri>http://www.blogger.com/profile/10271507933128080345</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.guj.com.br/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6820798.post-112430192671274007</id><published>2005-08-17T14:56:00.000-03:00</published><updated>2005-08-17T15:21:50.860-03:00</updated><title type='text'>CJ2005: Esquentando os Motores</title><content type='html'>Para quem não sabe,e ste fim de semana estarei no &lt;a href="http://www.conexaojava.com.br/conexaojava05/"&gt;Conexão Java 2005&lt;/a&gt;. Alémd e ajduar na organização como colaborador do GUJ, estarei minsitrando um workshop (não é exatamente um minicurso) sobre implementação de uma Camada de Negócios com objetos de verdade, utilizando como infra-estrutura o &lt;a href="http://www.springframework.com/"&gt;Spring Framework&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Ao contrário do que muitos pensam, &lt;span style="font-weight: bold;"&gt;não é curso de Spring&lt;/span&gt;. Minha propsota é simples:&lt;br /&gt;&lt;ol&gt;   &lt;li&gt;Breve explicação sobre o tema de camadas&lt;/li&gt;   &lt;li&gt;Apresentação de um pequeno problema&lt;/li&gt;   &lt;li&gt;Modelagem do Probleama utilizando Objetos&lt;/li&gt;   &lt;li&gt;Integração de Camadas Utilizando o Spring&lt;/li&gt; &lt;/ol&gt; Coisa simples, mesmo porque o tempo é limitadíssimo (2 horas apenas) e os recursos didáticos também. A idéia é montarmos um sisteminha (só a camada de negócios, o resto eu levo de casa :P ) e irmos desenvolvendo a idéia.&lt;br /&gt;&lt;br /&gt;Sem "classes de lógica", "classes de dados", VO/DTO/TO, EJB, JavaBeans ou qualquer outra coisa. Apenas POJOs e alguns padrõezinhos. Mesmo o Spring é coadjuvante.&lt;br /&gt;&lt;br /&gt;Espero vocês lá :)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Ah!&lt;/span&gt; Para quem é do Rio e não vai poder comparecer (tsc, tsc...) devo fazer algo aprecido por aqui em breve ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6820798-112430192671274007?l=pcalcado.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pcalcado.blogspot.com/feeds/112430192671274007/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6820798&amp;postID=112430192671274007&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112430192671274007'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112430192671274007'/><link rel='alternate' type='text/html' href='http://pcalcado.blogspot.com/2005/08/cj2005-esquentando-os-motores.html' title='CJ2005: Esquentando os Motores'/><author><name>Shoes</name><uri>http://www.blogger.com/profile/10271507933128080345</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.guj.com.br/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6820798.post-112428332430539380</id><published>2005-08-17T09:52:00.000-03:00</published><updated>2005-08-17T09:55:24.310-03:00</updated><title type='text'>Matando a Curiosidade</title><content type='html'>Algumas pessoas me pergutnaram porque &lt;a href="http://pcalcado.blogspot.com/2005/08/de-volta-ao-mcdonalds.html"&gt;eu chamo&lt;/a&gt; o &lt;a href="http://www.estacio.br"&gt;McDonald's&lt;/a&gt; de &lt;a href="http://www.mcdonalds.com.br"&gt;McDonald's&lt;/a&gt;, nada demais, mas taí a resposta.&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Oi, Bruno,&lt;br /&gt; &lt;br /&gt;Eu vi seu comentário há pouco, ainda não pude postar nada lá, trabalho tá complicado.&lt;br /&gt; &lt;br /&gt;respondendo a sua dúvida, não é nada demais, é apenas uma comparação do tipo pagou-passou.&lt;br /&gt; &lt;br /&gt;Você entra no mcDonald's, escolhe o que quer, paga, espera e recebe.&lt;br /&gt; &lt;br /&gt;Você entra na Estacio, escolhe o que quer fazer, paga, espera e recebe&lt;br /&gt;o diploma ;)&lt;br /&gt; &lt;br /&gt;[]s&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6820798-112428332430539380?l=pcalcado.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pcalcado.blogspot.com/feeds/112428332430539380/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6820798&amp;postID=112428332430539380&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112428332430539380'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112428332430539380'/><link rel='alternate' type='text/html' href='http://pcalcado.blogspot.com/2005/08/matando-curiosidade.html' title='Matando a Curiosidade'/><author><name>Shoes</name><uri>http://www.blogger.com/profile/10271507933128080345</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.guj.com.br/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6820798.post-112423604514415319</id><published>2005-08-16T20:28:00.000-03:00</published><updated>2005-08-16T20:47:25.153-03:00</updated><title type='text'>Pequeno Dicionário da Reusabilidade em Software</title><content type='html'>&lt;span style="font-weight: bold; color: rgb(153, 0, 0);"&gt;Componente:&lt;/span&gt;&lt;br /&gt;Um componente é um pedaço reutilizável de software. É utilizado de forma genérica e significa desde uma simples classe até um subsistema.&lt;br /&gt;&lt;br /&gt;Teoricamente, um componente:&lt;br /&gt;&lt;ul&gt; &lt;li&gt;Tem múltiplo-uso, é criado para ser reutilizável&lt;/li&gt;&lt;li&gt;Independente do contexto: Não depende das suas aplicações clientes&lt;/li&gt;&lt;li&gt;Pode formar compoentnes maiores se agrupado com outros componentes&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Information_hiding" title="Information hiding"&gt;&lt;/a&gt;Encapsulado, provendo uma interface para acesso á suas funcionalidades&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Instalado e desenvolvido independentemente da aplicação cliente&lt;/li&gt;&lt;li&gt;Implementação substituível desde que mantida a interface exposta pelo componente&lt;br /&gt;  &lt;/li&gt; &lt;/ul&gt; &lt;a href="http://en.wikipedia.org/wiki/Software_componentry"&gt;Da wikipedia&lt;/a&gt;, tirei esta figura:&lt;br /&gt;&lt;div style="text-align: center;" class="fullImageLink" id="file"&gt;&lt;img src="http://upload.wikimedia.org/wikipedia/en/5/5f/Software_components.png" alt="" border="0" height="194" width="203" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;O componente &lt;span style="font-family: courier new; color: rgb(51, 153, 153);"&gt;FooBar &lt;/span&gt;expõe interfaces para que seus clientes utilizem suas funcioonalidades. Se amanhã eu resolver utilizar uma outra implementação, chamada &lt;span style="color: rgb(51, 153, 153); font-family: courier new;"&gt;BarBar&lt;/span&gt;, eu posso simplesmente substituir &lt;span style="font-family: courier new; color: rgb(51, 153, 153);"&gt;FooBar&lt;/span&gt;, desde que &lt;span style="color: rgb(51, 153, 153); font-family: courier new;"&gt;BarBar&lt;/span&gt; implemente suas interfaces (&lt;span style="color: rgb(51, 153, 153); font-family: courier new;"&gt;GetStuff &lt;/span&gt;e &lt;span style="font-family: courier new; color: rgb(51, 153, 153);"&gt;AddStuff&lt;/span&gt;).&lt;br /&gt;&lt;/div&gt; &lt;/div&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(153, 0, 0);"&gt;Framework:&lt;/span&gt;&lt;br /&gt;Um framework é um conjunto de componentes de software que provêem uma arquitetura e estrutura básica para o desenvolvimento de uma aplicação. É uma aplicação semi-pronta que deve ser extendida e personalizada.&lt;br /&gt;&lt;br /&gt;Recentemente, têm se utilizado a palavra framework para designar qualquer conjunto de bibliotecas, se perdendo seu sentido real.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0); font-weight: bold;"&gt;Bilbioteca(Libraries):&lt;/span&gt;&lt;br /&gt;Subprograma ou coleção de subprogramas reutilizadas em aplicações. Contêm implementações de rotinas úteis que podem ser reutilizadas em outras aplicações.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(153, 0, 0);"&gt;Container:&lt;/span&gt;&lt;br /&gt;Gerencia o ciclo de vida de componentes e provê serviços a estes.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(153, 0, 0);"&gt;API:&lt;/span&gt;&lt;br /&gt;Interface exposta por um componente.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(153, 0, 0);"&gt;Camada Lógica (Layer):&lt;/span&gt;&lt;br /&gt;Separação de componentes por responsabilidades.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(153, 0, 0);"&gt;Camada Física (Tier):&lt;/span&gt;&lt;br /&gt;Separação de Camadas Lógicas por vários nós (máquinas).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6820798-112423604514415319?l=pcalcado.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pcalcado.blogspot.com/feeds/112423604514415319/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6820798&amp;postID=112423604514415319&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112423604514415319'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112423604514415319'/><link rel='alternate' type='text/html' href='http://pcalcado.blogspot.com/2005/08/pequeno-dicionrio-da-reusabilidade-em.html' title='Pequeno Dicionário da Reusabilidade em Software'/><author><name>Shoes</name><uri>http://www.blogger.com/profile/10271507933128080345</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.guj.com.br/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6820798.post-112368063311295379</id><published>2005-08-10T09:25:00.000-03:00</published><updated>2005-08-10T10:30:33.173-03:00</updated><title type='text'>Pilhas Proprietárias, Pilhas Livres e Pilhas Padronizadas</title><content type='html'>Qual é o clima atual no mundinho JEE (ou J2EE se você ainda não está nos novos tempos) ?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(153, 0, 0);"&gt;Há Muito Tempo Atrás, Numa Galáxia Muito Distante...&lt;/span&gt;&lt;br /&gt;No início, havia o caos. A única pseudo-padronização no mundo das aplicações cooporativas de massa era o &lt;a href="http://www.microsoft.com/com/default.mspx"&gt;MTS&lt;/a&gt; com COM. Quem podia, contava com &lt;a href="http://www.bea.com/framework.jsp?CNT=index.htm&amp;FP=/content/products/tux"&gt;Tuxedo &lt;/a&gt;e UNIX, mas isso não era muito comum fora dos bancos e operadoras de telecomunicações (que tem dinheiro de sobra).&lt;br /&gt;&lt;br /&gt;Se você queria contruir uma aplicação transacional, distribuída (CORBA ou DCOM, únicas opções levadas a sério), escalável, cheirosinha, você tinha que escolher um fornecedor. Ao contrário de JEE, os fornecedores não lhe davam uma implementação, eles lhe davam toda a tecnologia, você ficava preso a ela.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0); font-weight: bold;"&gt;JEE Ao Resgate (ou Desgaste)&lt;/span&gt;&lt;br /&gt;Então, alguém pensou em usar aquela linguagem de applets para produzir aplicaçõs de verdade e foram surgindo as especificações que culminaram no JEE, com o poderoso EJB como seu Rei e Deus.&lt;br /&gt;&lt;br /&gt;A pilha JEE é comsota por tantas especificaçõe sque abrangeriam quase tudo necessário para uma aplicação de grande porte.&lt;br /&gt;&lt;br /&gt;O grande problema, como quase sempre, foi a dose excessiva de hype. Toda documentação sobre JEE pré-2003 vai te falar em objetos distribuídos, componentes distribuídos, aplicações distribuídas, transações distribuídas, interfaces distribuídos... e surgiu a &lt;a href="http://www.sdmagazine.com/documents/s=7897/sdm0304a/sdm0304a.htm?temp=src8Ub4XpT"&gt;Primeira Lei da Distribuição de Objetos&lt;/a&gt;, de Fowler:&lt;br /&gt;&lt;blockquote&gt;Não Distribua Seus Objetos&lt;/blockquote&gt;Distribuir objetos num sistema é de uma forma bem geral desnecessário e complexo, mas JEE faz pensar que se você não distribui (ou não consegue distribuir) objetos, você é um marsupial, já que tem toooodas aquelas maravilhas tecnológicas para suportar isso. Para ter uma noção, basta saber que a especificação de EJB 1.0 não previa acesso local, apenas remoto, aos componentes.&lt;br /&gt;&lt;br /&gt;Apesar dos problemas, JEE surgiu e se manteve como a plataforma &lt;span style="font-style: italic;"&gt;de facto&lt;/span&gt; para aplicações &lt;span style="font-style: italic;"&gt;enterprise&lt;/span&gt; (seja lá o que isso signifique de verdade).&lt;br /&gt;&lt;br /&gt;Mas.. com o passar do tempo a coisa foi pegando fogo. Pessoas desenvolveram alternativas bem viáveis aos recursos de JEE criticados (EJBs, quase sempre), e surgiram ferramentas fantásticas como o &lt;a href="http://springframework.org/"&gt;Spring Framework&lt;/a&gt; e o &lt;a href="http://www.hibernate.org/"&gt;Hibernate&lt;/a&gt;, mas que são proprietárias (são software livre, mas não são um padrão).&lt;br /&gt;&lt;br /&gt;O Hibernate, depois de ganhar gás ao ser incluído no JBoss, virou modelo para o EJB 3.0. O Spring, apesar de uma plataforma comprovadamente (pelo menos por mim) excepcional, não teve a mesma sorte, e agora que a nova especificação de EJB traz recursos de IoC, começou uma guerrinha entre projetos. A projeto Hibernate vem &lt;a href="http://forum.springframework.org/viewtopic.php?t=6931"&gt;tratando com hostilidade&lt;/a&gt; o povo do Spring, já que eles "não são o padrão".&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0); font-weight: bold;"&gt;Piratas, Padrões e Picaretas&lt;/span&gt;&lt;br /&gt; Se você for começar um projeto hoje, que tecnologias vai utilizar?&lt;br /&gt;&lt;br /&gt;Se você for uma ameba ou trabalhar para amebas, vai usar EJB sem nem ler requisitos. Se você for um cara que sabe avaliar a melhor ferramenta para o serviço, come vegetais e exercita o cérebro, vai acabar numa senhora dúvida.&lt;br /&gt;&lt;br /&gt;A pilha JEE oferece muitos serviços e muita complexidade, mas pelo menos é padrão.&lt;br /&gt;&lt;br /&gt;O Spring oferece serviços de uma forma leve e bonitinha, mas não é padrão (seus objetos de negócio não estão presos ao Spring, não é tão difícil migrar os serviços para alternativas caso queira),e é apenas um entre muitos.&lt;br /&gt;&lt;br /&gt;Claro que se você prefere que os outros façam a escolha por você, algumas empresas estão criando suas próprias pilhas, &lt;a href="http://www.sourcelabs.com/SASHStack.htm"&gt;empacotando projetos Open Source&lt;/a&gt; e formando suas próprias visões do Java para aplicações de grande e médio porte (Pequeno porte? Por favor, esqueça JEE, se não Java. Conhece o &lt;a href="http://www.rubyonrails.com/"&gt;Rails&lt;/a&gt;?). Temos uma &lt;a href="http://www.powerlogic.com.br/"&gt;brasileira&lt;/a&gt;, inclusive.&lt;br /&gt;&lt;br /&gt;Então, temos um problema.&lt;br /&gt;Temos mesmo?&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0); font-weight: bold;"&gt;Liberdade de Escolha&lt;/span&gt;&lt;br /&gt;A confusão tem seu lado bom. Se fosse nos antigos tempos negros do Java Enterprise Edition, você não teria escolhas, tinha que usar EJB e pagar milhões num Servidor de Aplicações. Hoje você pdoe resolver o mesmo problema de milhões de maneiras diferentes e com um Tomcat (ou &lt;a href="http://jetty.mortbay.org/jetty/"&gt;Jetty &lt;/a&gt;se você for um cara esperto).&lt;br /&gt;&lt;br /&gt;Leia a seçaõ acima de novo, mas com outros olhos. Você pode escolher. Isso é &lt;span style="font-weight: bold;"&gt;muito&lt;/span&gt; importante.&lt;br /&gt;&lt;br /&gt;Infelizmente, escolher bem é difícil. No mínimo você deveria conhecer um pouco sobre o cenário atual, o cenário futuro e muito sobre tecnologia. Existem pessoas que simplesmente &lt;span style="font-weight: bold;"&gt;precisam&lt;/span&gt; que alguém lhes diga o que fazer, o que  usar, e para estes um cenário mais fechado é o ideal.&lt;br /&gt;&lt;br /&gt;Seja lá o que você escolher, considere alguns pontos:&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;Empresas podem acabar, cuidado ao se prender a uma&lt;/li&gt;   &lt;li&gt;Projetos de Open Source Software podem acabar, mas o código esta lá (você acha que se o Struts for definitivamente e indubitavelmente depreciado ninguém vai mantê-lo?)&lt;/li&gt;   &lt;li&gt;Não use uma tecnologia onde mais de 20% do código construído por seus programadores (ou ferramentas) é pumbling (configuração, adaptadores, gambiarras) e não regra de negócio&lt;/li&gt;   &lt;li&gt;Não ache que uma ferramenta (Editor, IDE, plugin, Ant Task) vai reduzir complexidade gerando código (código gerado conta nos 20% da regra anterior, bytecode gerado não conta)&lt;/li&gt;   &lt;li&gt;Não se prenda a uma plataforma que não permita integração com o padrão JEE (mes mo EJB)&lt;br /&gt;  &lt;/li&gt; &lt;/ul&gt; Por esses pontos, hoje, eu escolheria o Spring em boa parte dos meus projetos. Qual a sua escolha?&lt;br /&gt;&lt;br /&gt;(Este post foi motivado pelo do &lt;a href="http://dynamicsemantics.blog-city.com/commonstack.htm"&gt;Floyd Marinescu&lt;/a&gt;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6820798-112368063311295379?l=pcalcado.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pcalcado.blogspot.com/feeds/112368063311295379/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6820798&amp;postID=112368063311295379&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112368063311295379'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112368063311295379'/><link rel='alternate' type='text/html' href='http://pcalcado.blogspot.com/2005/08/pilhas-proprietrias-pilhas-livres-e.html' title='Pilhas Proprietárias, Pilhas Livres e Pilhas Padronizadas'/><author><name>Shoes</name><uri>http://www.blogger.com/profile/10271507933128080345</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.guj.com.br/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6820798.post-112364038919697425</id><published>2005-08-09T22:54:00.000-03:00</published><updated>2005-08-10T09:20:42.300-03:00</updated><title type='text'>De Volta ao MCDonald's</title><content type='html'>Começaram as aulas no &lt;a href="http://www.estacio.br/"&gt;McDonald's&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Eu me inscrevi em algumas matérias com títulos bem ttneressantes: &lt;span style="font-weight: bold; font-style: italic;"&gt;Tópicos Especiais I e II&lt;/span&gt; e &lt;span style="font-style: italic; font-weight: bold;"&gt;Tópicos Especiais em Linguagem de Programação&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Tópicos I foi ontem. JSP e Servlets. Imagine um treinamento meia-boca &lt;span style="font-weight: bold;"&gt;sem computador&lt;/span&gt;. Eu não acho que aula de computação tenha que ter computador sempre, porém aquilo não é uma aula, é um overview.&lt;br /&gt;&lt;br /&gt;Hoje foi Tópicos Especiais em Linguagens, matéria de último (8º) período. PHP. PHP? PHP! Essa foi especial, o professor falou que vai usar as três primeiras aulas (umas 4,5 horas/aula) para instalar o PHP e o &lt;a href="http://www.xitami.com/"&gt;Xitami&lt;/a&gt; em Windows (nem Apache o cara usa!). Ah, essa é sem computador também, essas aulas vão ser no datashow. Três trabalhos, um em HTML, um em PHP e um em XML (validando cotnra um DTD, parece).&lt;br /&gt;&lt;br /&gt;Não é um curso de extensão, não é uma matéria optativa, é uma matéria do bacharelado.&lt;br /&gt;&lt;br /&gt;Eu também tive que ouvir que não existe linguagem mais rápida na web que PHP, que esta não tem máquina virtual, pelo contrário, o objetivo de PHP é ser "perto da máquina".&lt;br /&gt;&lt;br /&gt;Teoricamente, estes alunos já viram C, C++, Java (um semestre cada), conhecem todas as camadas do TCP/IP (dois semestres), o básico de sistemas operacionais e sistemas distribuídos (dois semestres), e bancos de dados relacionais (dois semestres). E ninguém sabe nada.&lt;br /&gt;&lt;br /&gt;Depois me perguntam porque eu não levo a Estácio a sério. Depois &lt;a href="http://www.guj.com.br/posts/list/24729.java"&gt;me perguntam&lt;/a&gt; porque sou contra regulamentar a profissão e exigir diploma de terceiro grau.&lt;br /&gt;&lt;br /&gt;Ah, e isso não acontece só no McDonald's não, que fique bem claro. Além de tantas outras concorrentes, eu conheço vários bacharelandos e mestrandos de universidades excelentes que não sabem absolutamente nada de nada.&lt;br /&gt;&lt;br /&gt;A diferença é que estes tiveram uma chance de aprender. E de graça.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6820798-112364038919697425?l=pcalcado.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pcalcado.blogspot.com/feeds/112364038919697425/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6820798&amp;postID=112364038919697425&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112364038919697425'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112364038919697425'/><link rel='alternate' type='text/html' href='http://pcalcado.blogspot.com/2005/08/de-volta-ao-mcdonalds.html' title='De Volta ao MCDonald&apos;s'/><author><name>Shoes</name><uri>http://www.blogger.com/profile/10271507933128080345</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.guj.com.br/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6820798.post-112350794801520958</id><published>2005-08-08T10:05:00.000-03:00</published><updated>2005-08-08T10:32:28.056-03:00</updated><title type='text'>Do Not Disturb</title><content type='html'>Meu sumiço recente tem vários motivos, dentre eles a preparação do minicurso do Conexão Java 2005, que tem tomado bastante tempo (estou organizando uma &lt;a href="http://www.guj.com.br/posts/list/28811.java"&gt;caravana do Rio de Janeiro&lt;/a&gt;, quem quiser ir, entre em contato ;) ). Os outros vão ficando claros aos poucos (como já dizia Dona Filó: &lt;span style="font-style: italic;"&gt;Mistéééééééééééééééééééério...&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;Ontem, o &lt;a href="http://www.guj.com.br/user/profile/2128.java"&gt;Vinci &lt;/a&gt;me deu uma dica muito legal: &lt;a href="http://www.workrave.org/"&gt;Workrave&lt;/a&gt;. Este programinha te ajuda a prevenir &lt;a href="http://www.neuro.med.br/LER.htm"&gt;LER&lt;/a&gt; calculando o tempo que você usa o computador e propondo paradas e exercícios. Não sei se vou realmente conseguir usar isso muito tempo, mas estou tentando. Na verdade estou me sentido bem confortável usando, sei lá, consciência menos pesada...&lt;br /&gt;&lt;br /&gt;Mais detalhes no &lt;a href="http://www.workrave.org/leaflet/files/leaflet.pdf"&gt;whitepaper&lt;/a&gt;, está em inglês mas o programa tem I18N e fica em português ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6820798-112350794801520958?l=pcalcado.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pcalcado.blogspot.com/feeds/112350794801520958/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6820798&amp;postID=112350794801520958&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112350794801520958'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112350794801520958'/><link rel='alternate' type='text/html' href='http://pcalcado.blogspot.com/2005/08/do-not-disturb.html' title='Do Not Disturb'/><author><name>Shoes</name><uri>http://www.blogger.com/profile/10271507933128080345</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.guj.com.br/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6820798.post-112292622012462320</id><published>2005-08-01T16:50:00.000-03:00</published><updated>2005-08-01T16:57:00.130-03:00</updated><title type='text'>Inscrições Abertas para o ConexãoJava'05!</title><content type='html'>O evento da comunidade Java brasileira, &lt;a href="http://www.conexaojava.com.br/conexaojava05/"&gt;Conexão Java 2005&lt;/a&gt;, já está com inscrições abertas.&lt;br /&gt;&lt;br /&gt;A segunda edição do evento consegue superar a primeira, com muito conteúdo para todos os paladares. Veja a grade &lt;a href="http://www.conexaojava.com.br/conexaojava05/programacao.jsp"&gt;aqui&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Eu devo estar tentando manter a atenção de quem se atrever a assitir meu mini-curso no domingo. Java, OOP e Spring na camada de negócios, para quem acredita que só código procedural salva.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size:180%;"&gt;Bom, inscrições &lt;span style="font-weight: bold;"&gt;gratuitas&lt;/span&gt; abertas por curto tempo &lt;a href="http://www.conexaojava.com.br/conexaojava05/inscricao.jsp"&gt;aqui&lt;/a&gt; ;)&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6820798-112292622012462320?l=pcalcado.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pcalcado.blogspot.com/feeds/112292622012462320/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6820798&amp;postID=112292622012462320&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112292622012462320'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112292622012462320'/><link rel='alternate' type='text/html' href='http://pcalcado.blogspot.com/2005/08/inscries-abertas-para-o-conexojava05.html' title='Inscrições Abertas para o ConexãoJava&apos;05!'/><author><name>Shoes</name><uri>http://www.blogger.com/profile/10271507933128080345</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.guj.com.br/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6820798.post-112292078134708052</id><published>2005-08-01T15:20:00.000-03:00</published><updated>2005-08-01T15:31:16.176-03:00</updated><title type='text'>Pérolas de Lista de Discussão I</title><content type='html'>&lt;table border="0" cellpadding="0" cellspacing="0" width="100%"&gt; &lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;span style="font-size:-1;"&gt;&lt;b&gt;&lt;wyzcsdsfasbr@ig.com.br&gt; &lt;/b&gt;&lt;/span&gt; &lt;/td&gt; &lt;td align="right"&gt; &lt;span style="font-size:-1;"&gt;&lt;b&gt; Mon, Aug 1, 2005 at 2:57 PM &lt;/b&gt;&lt;/span&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt; &lt;td colspan="2"&gt; &lt;span style="font-size:-1;"&gt; &lt;div&gt; Reply-To: java-x@yahoogrupos.com.br &lt;/div&gt;  &lt;/span&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt; &lt;td colspan="2"&gt; &lt;table border="0" cellpadding="12" cellspacing="0" width="100%"&gt; &lt;tbody&gt;&lt;tr&gt; &lt;td&gt; &lt;span style="font-size:-1;"&gt;Olá pessoal!!!&lt;br /&gt;&lt;br /&gt;Como faço para arredondar para mais um valor contido em uma variável do&lt;br /&gt;tipo int?&lt;br /&gt;Desde já, obrigado.&lt;br /&gt;&lt;br /&gt;Abraçcos,&lt;br /&gt;&lt;br /&gt;C.O.B.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt; &lt;/table&gt; &lt;table border="0" cellpadding="0" cellspacing="0" width="100%"&gt; &lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;span style="font-size:-1;"&gt;&lt;b&gt;ABCD &lt;pelotas@instituicaopublicaqueadmitesohcomconcursos.com.br&gt; &lt;/b&gt;&lt;/span&gt; &lt;/td&gt; &lt;td align="right"&gt; &lt;span style="font-size:-1;"&gt;&lt;b&gt; Mon, Aug 1, 2005 at 2:58 PM &lt;/b&gt;&lt;/span&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt; &lt;td colspan="2"&gt; &lt;span style="font-size:-1;"&gt; &lt;div&gt; Reply-To: java-x@yahoogrupos.com.br &lt;/div&gt; &lt;div&gt;&lt;br /&gt; &lt;/div&gt; &lt;/span&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt; &lt;td colspan="2"&gt; &lt;table border="0" cellpadding="12" cellspacing="0" width="100%"&gt; &lt;tbody&gt;&lt;tr&gt; &lt;td&gt; &lt;span style="font-size:-1;"&gt;uai..naum tem como vc arredondar um int. ele ja é arredondado!&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt; &lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6820798-112292078134708052?l=pcalcado.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pcalcado.blogspot.com/feeds/112292078134708052/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6820798&amp;postID=112292078134708052&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112292078134708052'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112292078134708052'/><link rel='alternate' type='text/html' href='http://pcalcado.blogspot.com/2005/08/prolas-de-lista-de-discusso-i.html' title='Pérolas de Lista de Discussão I'/><author><name>Shoes</name><uri>http://www.blogger.com/profile/10271507933128080345</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.guj.com.br/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6820798.post-112290294368264591</id><published>2005-08-01T10:26:00.000-03:00</published><updated>2005-08-01T10:29:03.686-03:00</updated><title type='text'>Garota de Ipanema!?!</title><content type='html'>Já que eu já escracehi minha tietice pela melhor banda de seattle ever, mais um pouco não faz mal :P&lt;br /&gt;&lt;br /&gt;Pode ser boato, pode ser pegadinha, pode ser o diabo a quatro, mas no site oficial do &lt;a href="http://www.pearljam.com/"&gt;Pearl Jam&lt;/a&gt;&lt;br /&gt; vocês podem ouvir, com clareza, a calma voz de Tom Jobim cantando um clássico da MPB.&lt;br /&gt;&lt;br /&gt;Nada nas &lt;a href="http://www.pearljam.com/tourdates.html"&gt;datas&lt;/a&gt;, mas muitos&lt;a href="http://www.google.com/search?hl=en&amp;q=%22garota+de+ipanema%22+%22pearl+jam%22&amp;amp;btnG=Google+Search"&gt; boatos na Internet&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Será que pela primeira vez na vida vou conseguir ir a um show de uma&lt;br /&gt;banda que eu curto antes dela acabar?!?!?!&lt;br /&gt;&lt;br /&gt;Shoes, que paga quanto for por esse teorico show&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6820798-112290294368264591?l=pcalcado.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pcalcado.blogspot.com/feeds/112290294368264591/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6820798&amp;postID=112290294368264591&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112290294368264591'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112290294368264591'/><link rel='alternate' type='text/html' href='http://pcalcado.blogspot.com/2005/08/garota-de-ipanema.html' title='Garota de Ipanema!?!'/><author><name>Shoes</name><uri>http://www.blogger.com/profile/10271507933128080345</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.guj.com.br/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6820798.post-112246794135626851</id><published>2005-07-27T09:38:00.000-03:00</published><updated>2005-07-27T10:00:48.116-03:00</updated><title type='text'>Eu queria conhecer mais gerentes...</title><content type='html'>para poder indicar &lt;a href="http://www.developerdotstar.com/printable/mag/articles/software_team_turnover.html"&gt;este artigo&lt;/a&gt; para ainda mais gente.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt; &lt;blockquote&gt;   &lt;p&gt;As you can see from the graph, there is a certain point at which a developer starts learning more about the domain and not learning much, if anything, new technically. For many developers this may not be an issue, but for other developers this can result in a loss of interest in the company, the product, or their job as a whole.&lt;/p&gt;    &lt;p&gt;A developer may be seeking to improve their skills, and not care as much about domain specific knowledge. If that is the case, this is the point at which a developer can become dissatisfied with his job and look on to bigger and better horizons.&lt;/p&gt; &lt;/blockquote&gt; &lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6820798-112246794135626851?l=pcalcado.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pcalcado.blogspot.com/feeds/112246794135626851/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6820798&amp;postID=112246794135626851&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112246794135626851'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112246794135626851'/><link rel='alternate' type='text/html' href='http://pcalcado.blogspot.com/2005/07/eu-queria-conhecer-mais-gerentes.html' title='Eu queria conhecer mais gerentes...'/><author><name>Shoes</name><uri>http://www.blogger.com/profile/10271507933128080345</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.guj.com.br/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6820798.post-112240504300320282</id><published>2005-07-26T16:03:00.000-03:00</published><updated>2005-07-26T16:11:43.193-03:00</updated><title type='text'>Anglicanismos Perigosos</title><content type='html'>&lt;h3 style="font-weight: normal;"&gt;&lt;span style="font-size:100%;"&gt;No &lt;a href="http://www.javasoft.com.br/"&gt;javaSoft&lt;/a&gt;:&lt;/span&gt;&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;J2EE Team Leader - SP&lt;/h3&gt; A XXX procura um J2EE Team Leader com as seguintes características: Ele gera uma equipe de 4 desenvolvedores Java. Ele é responsavel pelo respeito dos prazos, custos e qualidade dos desenvolvimentos. Ele é reconhecido pelas qualidades de liderança e é conhecido como um ótimo motivador. Ele tem uma experiência comprovada com metodologias de desenvolvimento de softwares (RUP), modelagem de casos de uso e desenvolvimento de test cases. Conhecimentos de alto nivel do UML é um requisito. Parte das atividades incluirão também desenvolvimento. Por isso, ele já é um desenvolvedor J2EE experiente, com domínio do desenvolvimento multi-câmadas usando tecnologias tais Struts, EJB, Junit, etc. &lt;span style="font-weight: bold;"&gt;Estes conhecimentos serão usados &lt;span style="font-size:130%;"&gt;para &lt;span style="color: rgb(204, 0, 0);"&gt;coachar &lt;/span&gt;a equipe &lt;/span&gt;sobre pontos de design, guidelines, etc.&lt;/span&gt; Tem 5+ anos de experiência em desenvolvimento de software. Enviar currículo, preferencialmente em inglês, junto com expectativas salariais&lt;br /&gt;&lt;br /&gt;E no dicionário:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;table id="top" style="border-top: 1px solid rgb(165, 165, 165); width: 388px; height: 39px;" bgcolor="#d7d2c0" border="0" cellpadding="0" cellspacing="0"&gt; &lt;tbody&gt;&lt;tr&gt;&lt;td id="a18bb" style="padding: 0px 0px 0px 10px;"&gt;&lt;div style="color: rgb(153, 0, 0);" class="zoom_verbete"&gt;coaxar&lt;/div&gt;&lt;/td&gt; &lt;td id="a10nb" style="padding: 0px 10px 0px 0px;" align="right"&gt;&lt;a href="javascript:print();"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/td&gt; &lt;/tr&gt;&lt;/tbody&gt; &lt;/table&gt;  &lt;div id="logoprint"&gt;&lt;img style="width: 391px; height: 40px;" src="http://ho.i.uol.com.br/logo_print01.gif" border="0" /&gt;&lt;div id="a18bb" style="padding: 10px 0px 0px 10px;"&gt;{verbete}&lt;/div&gt;&lt;/div&gt;       &lt;b&gt;Datação&lt;/b&gt;&lt;br /&gt;&lt;span class="preto"  style="font-size:78%;"&gt; a1805 cf. BocOp&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;   &lt;b&gt;Acepções&lt;/b&gt;&lt;br /&gt;&lt;span class="sq"&gt;■&lt;/span&gt; &lt;span class="abrev"&gt;verbo&lt;/span&gt;&lt;br /&gt;&lt;span class="abrev"&gt;intransitivo&lt;/span&gt;&lt;br /&gt;&lt;span class="preto"&gt; &lt;b style="color: rgb(255, 0, 0); font-weight: bold;"&gt;1&lt;/b&gt;&lt;span style="color: rgb(255, 0, 0); font-weight: bold;"&gt;    soltar ou fazer ouvir a sua voz (a rã ou o sapo)&lt;/span&gt;&lt;br /&gt;&lt;span class="exemplo"&gt;&lt;span style="color: rgb(255, 0, 0); font-weight: bold;"&gt; Ex.:  rãs e sapos coaxavam próximo &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0); font-weight: bold;" class="abrev"&gt;transitivo direto, bitransitivo e intransitivo&lt;/span&gt;&lt;br /&gt;&lt;span class="preto"&gt; &lt;b style="color: rgb(255, 0, 0); font-weight: bold;"&gt;2&lt;/b&gt;&lt;span style="color: rgb(255, 0, 0); font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0); font-weight: bold;font-size:78%;" &gt;(1858)&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0); font-weight: bold;" class="explica"&gt;Derivação: sentido figurado.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0); font-weight: bold;" class="preto"&gt;    &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0); font-weight: bold;"&gt; grasnar ou soar como a rã ou o sapo&lt;/span&gt;&lt;br /&gt;&lt;span class="exemplo"&gt; Ex.:  &lt;decepcionada&gt;  &lt;as&gt;&lt;br /&gt;&lt;/as&gt;&lt;/decepcionada&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;     &lt;b&gt;Etimologia&lt;/b&gt;&lt;br /&gt;lat. &lt;i&gt;coaxo,as,&lt;/i&gt;&lt;span style="font-size:85%;"&gt;&lt;i&gt;á&lt;/i&gt;&lt;/span&gt;&lt;i&gt;vi,&lt;/i&gt;&lt;span style="font-size:85%;"&gt;&lt;i&gt;á&lt;/i&gt;&lt;/span&gt;&lt;i&gt;tum,&lt;/i&gt;&lt;span style="font-size:85%;"&gt;&lt;i&gt;á&lt;/i&gt;&lt;/span&gt;&lt;i&gt;re &lt;/i&gt;'coaxar', de &lt;i&gt;coax&lt;/i&gt; 'voz imitativa da rã', do gr.&lt;i&gt; kóaks&lt;/i&gt; 'id.'&lt;br /&gt;&lt;br /&gt;   &lt;b&gt;Sinônimos&lt;/b&gt;&lt;br /&gt;ralar, relar&lt;br /&gt;&lt;br /&gt;       &lt;b&gt;Homônimos&lt;/b&gt;&lt;br /&gt;coaxo(1ªp.s.)/ &lt;i&gt;coaxo&lt;/i&gt;(s.m.)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;...que paguem muito bem...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6820798-112240504300320282?l=pcalcado.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pcalcado.blogspot.com/feeds/112240504300320282/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6820798&amp;postID=112240504300320282&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112240504300320282'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112240504300320282'/><link rel='alternate' type='text/html' href='http://pcalcado.blogspot.com/2005/07/anglicanismos-perigosos.html' title='Anglicanismos Perigosos'/><author><name>Shoes</name><uri>http://www.blogger.com/profile/10271507933128080345</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.guj.com.br/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6820798.post-112240385620411761</id><published>2005-07-26T15:38:00.000-03:00</published><updated>2005-07-28T15:33:04.946-03:00</updated><title type='text'>Hospedando Ruby on Rails</title><content type='html'>A critério de curiosidade, mandei um e-mail para a &lt;a href="http://site.locaweb.com.br/"&gt;Locaweb &lt;/a&gt;(onde já hospedei alguns projetos e ficam o site do GUJ, Portal java e RioJUG) e &lt;a href="http://www.infolink.com.br/"&gt;Infolink&lt;/a&gt; (onde tenho o domínio fragmental.com.br) perguntando sobre a disponibilidade do &lt;a href="http://www.rubyonrails.com/"&gt;Ruby on Rails&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Tudo começou porque estava conversando com um amigo recém-promovido a gerente de uma agência web, e estava pensando em sugerir para ele o rails. Eu sugeri o &lt;a href="http://mentawai.lohis.com.br/"&gt;Mentawai&lt;/a&gt;, mas conheço bem o tipo de negócio de uma agência deste tipo e existem muitos projetos compostos apenas de "gerenciadores de locadora". Neste caso uma linguagem de script é melhor, mas usar ASP clássico, para mim, é fora de cogitação, e usar PHP ou CGI me parece algo retrô demais.&lt;br /&gt;&lt;br /&gt;Semrpe que alguém fala em produtividade ao jsutificar uma arquitetura fedorenta utilizando JSPs ou Servlets/Actions com regras de negócio e acessando um SGBD, eu me indago se esta pessoa acredita que só existe Java no mundo.&lt;br /&gt;&lt;br /&gt;Bem, a Infolink ainda não respondeu, mas a locaweb mandou um e-mail:&lt;br /&gt;&lt;blockquote&gt;Boa tarde,&lt;br /&gt;&lt;br /&gt;Disponibilizamos nas hospedagens em platafoma Linux o Ruby.&lt;br /&gt;Para mais informações sobre os componentes e linguagens suportadas nos&lt;br /&gt;servidores pedimos que acesse o endereço&lt;br /&gt;&lt;a onclick="return top.js.OpenExtLink(window,event,this)" href="http://site.locaweb.com.br/assinaturas/planos_de_hospedagem.asp" target="_blank"&gt;http://site.locaweb.com.br&lt;wbr&gt;/assinaturas/planos_de_hospeda&lt;wbr&gt;gem.asp&lt;/a&gt;&lt;/blockquote&gt;&lt;a onclick="return top.js.OpenExtLink(window,event,this)" href="http://site.locaweb.com.br/assinaturas/planos_de_hospedagem.asp" target="_blank"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Apesar da página em questão não mencionar o Ruby (a página que menciona é a http://site.locaweb.com.br/assinaturas/caracteristicas.asp ), parece que sim.&lt;br /&gt;&lt;br /&gt;A Locaweb é conhecida por seu suporte técnico ruim e pela droga que é ter um contexto de testes e um de produção que só é reiniciado se você implorar, mas se você for paciente acaba dando certo na maioria das vezes.&lt;br /&gt;&lt;br /&gt;Como a Infolink suporta Python, não acho que deva ter problemas. O suporte deles é bom e disponibilizam um shell SSH para você (&lt;span style="font-weight: bold;"&gt;todo provedor deveria fazer isso!&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;O  TaQ disponibilizou um &lt;a href="http://beam.to/taq/downloads/tutorialruby.pdf"&gt;excelente tutorial de Ruby em portugues&lt;/a&gt;, que tal dar &lt;a href="http://www.rubyonrails.com/media/video/rails_take2_with_sound.mov"&gt;uma olhada no rails&lt;/a&gt; agora?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(204, 0, 0);"&gt;Ataulizado (28/07 15:31):&lt;/span&gt;&lt;br /&gt;Resposta da Infolink:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Prezado Philip,&lt;br /&gt; &lt;br /&gt;Desculpe-nos a demora na resposta. O ambiente ruby não era padrão em nossa&lt;br /&gt;hospedagem. A partir de hoje o ambiente está disponível em nossa hospedagem&lt;br /&gt;a partir de nosso plano premium.&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;Atenciosamente,&lt;br /&gt; &lt;br /&gt;Comercial&lt;br /&gt;Roberto Ribeiro&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6820798-112240385620411761?l=pcalcado.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pcalcado.blogspot.com/feeds/112240385620411761/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6820798&amp;postID=112240385620411761&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112240385620411761'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112240385620411761'/><link rel='alternate' type='text/html' href='http://pcalcado.blogspot.com/2005/07/hospedando-ruby-on-rails.html' title='Hospedando Ruby on Rails'/><author><name>Shoes</name><uri>http://www.blogger.com/profile/10271507933128080345</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.guj.com.br/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6820798.post-112239060673161495</id><published>2005-07-26T12:08:00.000-03:00</published><updated>2005-07-26T12:10:06.736-03:00</updated><title type='text'>Joel: Na Mosca</title><content type='html'>Pra variar, o Joel fala pela voz dos oprimidos engenheiros de software: &lt;a href="http://www.joelonsoftware.com/articles/HighNotes.html"&gt;Hitting the High Notes&lt;/a&gt; deve ser lido. Agora. Não tô brincando.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6820798-112239060673161495?l=pcalcado.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pcalcado.blogspot.com/feeds/112239060673161495/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6820798&amp;postID=112239060673161495&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112239060673161495'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112239060673161495'/><link rel='alternate' type='text/html' href='http://pcalcado.blogspot.com/2005/07/joel-na-mosca.html' title='Joel: Na Mosca'/><author><name>Shoes</name><uri>http://www.blogger.com/profile/10271507933128080345</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.guj.com.br/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6820798.post-112226191349654268</id><published>2005-07-24T23:52:00.000-03:00</published><updated>2005-07-25T00:34:04.520-03:00</updated><title type='text'>De volta</title><content type='html'>Minhas ferias acabam na prática em oito minutos (23:52 hs).&lt;br /&gt;&lt;br /&gt;Eu e Tatiana acabamos de voltar de &lt;a href="http://www.lumiaronline.com.br/"&gt;Lumiar&lt;/a&gt;, uma cidadezinha fantástica com um website horrível. Fica antes de Friburgo. Ficamos hospedados na simpática &lt;a href="http://www.pousadapierro.com.br/"&gt;Pousada Pierro&lt;/a&gt;, recomendadissima pelo ambiente calmo, rio de aguas limpidas e principalmente a simpatia do casal Rosana e Marcus, os proprietários, que entre uma cachacinha e outra servem pratos que você não encontra facilmente nem na cidade (truta com alcaparras, recomendadíssimo). Tinham que ser de Niterói :)&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img style="cursor: -moz-zoom-in; width: 327px; height: 217px;" alt="A imagem “http://www.lazeremlumiar.com.br/img/oferece/big1.jpg” contém erros e não pode ser exibida." src="http://www.lazeremlumiar.com.br/img/oferece/big1.jpg" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Ficar lá me fez parar e pensar sobre largar tudo e viver de fazer software pra pousada no meio do mato. Claro que a lembrança de quão longe eu estava da familia, de uma praia e de um bar com &lt;a href="http://www.heineken.com/brazil/WOH/SplashPage/SplashPage.aspx?ReturnURL="&gt;&lt;layer id="googlebar_highlight" style="-moz-user-select: -moz-all; background-color: yellow;"&gt;Heineken&lt;/layer&gt; &lt;/a&gt;me fez desistir imediatamente, mas acho que este pensamento não vai embora completamente tão cedo, se for.&lt;br /&gt;&lt;br /&gt;Momento Turístico acabado, vamos a um breve resumo das férias. Eu tinha muito o que fazer e não fiz quase nada. Ponto final.&lt;br /&gt;&lt;br /&gt;Amanhã tem palestra do Sérgio Oliveira sobre o &lt;a href="http://mentawai.lohis.com.br/"&gt;Mentawai &lt;/a&gt;no RIOJUG. Espero encontrar todos os (dois) leitores cariocas deste blog lá. &lt;a href="http://www.riojug.org/conteudo.jsp?id=398"&gt;Mais detalhes no site do JUG&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Falando no Sérgio, ele acabou publicando um &lt;a href="http://www.javaworld.com/javaworld/jw-07-2005/jw-0718-mentawai.html"&gt;artigo no Java World&lt;/a&gt; sobre o menta, bem legal e vale uma lida. Após a publicação, eu enviei a &lt;a href="http://www.theserverside.com/news/thread.tss?thread_id=35297"&gt;notícia para o theServerSide&lt;/a&gt;, e como sempre meteram o pau em tudo  (será que o &lt;a href="http://www.jroller.com/page/fate/"&gt;hani &lt;/a&gt;leu?).&lt;br /&gt;&lt;br /&gt;Amanhã é meu útlimo dia oficial de férias, e eu ainda tenho muito o que fazer. O &lt;a href="http://www.conexaojava.com.br/conexaojava05/"&gt;Conexão Java'05&lt;/a&gt; já tem data (20 e 21 de Agosto) e uma grade provisória definida, a galera do GUJ e PortalJava está trabalhando muito nisso.&lt;br /&gt;&lt;br /&gt;Um dos diferenciais do CJ vai ser o &lt;a href="http://www.conexaojava.com.br/conexaojava05/liveforum.jsp"&gt;LiveForum&lt;/a&gt;. A idéia é trazer o mesmo clima que temos nos fóruns virtuais para o mundo real.&lt;br /&gt;&lt;br /&gt;Falando em fórum virtual, eu tive uma idéia e psotei no &lt;a href="http://www.guj.com.br/posts/list/27840.java"&gt;GUJ outro dia&lt;/a&gt;. É sobre utilizar metadados para expressar estereótipos padrão da UML, dêem uma olhada. Como disse lá, mandei um e-mail ao comitê que especifica a &lt;a href="http://www.jcp.org/aboutJava/communityprocess/edr/jsr250/"&gt;JSR 250&lt;/a&gt;. Ainda não obtive resposta.&lt;br /&gt;&lt;br /&gt;Nesses quase quinze dias eu desenvolvi uma &lt;a href="http://www.bloglines.com/"&gt;Bloglines&lt;/a&gt;-fobia. Fui enrolando, enrolando e tenho mais de 7000 itens novos para ler, a preguiça tem me feito passar longe do bichinho. Acabo de dar uma olhadela, criei coragem e entrei nos blogs de java. Marquei alguns posts interessantes, podem valer comentários aqui, mas deixemos para amanhã ou depois.&lt;br /&gt;&lt;br /&gt;Bom, depois dessa rápida atualizada, espero aparecer com posts menos chatos (eu sei que tenho prometido isso há algum tempo, uma hora eu acerto :P).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6820798-112226191349654268?l=pcalcado.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pcalcado.blogspot.com/feeds/112226191349654268/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6820798&amp;postID=112226191349654268&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112226191349654268'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112226191349654268'/><link rel='alternate' type='text/html' href='http://pcalcado.blogspot.com/2005/07/de-volta.html' title='De volta'/><author><name>Shoes</name><uri>http://www.blogger.com/profile/10271507933128080345</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.guj.com.br/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6820798.post-112144428853775164</id><published>2005-07-15T12:44:00.000-03:00</published><updated>2005-07-15T13:18:08.556-03:00</updated><title type='text'>Todo Mundo é Ágil</title><content type='html'>O &lt;a href="http://xprio.blogspot.com/"&gt;blog do XP Rio&lt;/a&gt; dá a dica de um&lt;a href="http://www.informit.com/articles/printerfriendly.asp?p=25913&amp;rl=1"&gt; ótimo artigo&lt;/a&gt; por &lt;a href="http://www.informit.com/authors/bio.asp?a=7b7d1926-0ded-4713-a53b-549af36312de"&gt;Pete McBreen&lt;/a&gt;. Pete é o autor do aclamado livro &lt;a href="http://www.informit.com/title/0201733862"&gt;Software Craftmanship&lt;/a&gt;, que aidna não tive o prazer de ler.&lt;br /&gt;&lt;br /&gt;No texto, o autor fala do que está acontecendo com o mercado hoje, onde todo mundoe stá dizendo "eu sou ágil". Isso, como ele afirma, aconteceu com Orientação a Objetos, também com componentização, RAD, MVC e tantas outras coisas.&lt;br /&gt;&lt;br /&gt;Realmente isso está acotnecendo, basta olhar em volta. Me lembra uma empresa brasileira que vende uma IDE RAD dizendo ser um "método ágil". Também já ouvi alguns líderes de equipes de desenvolvimento falando uma série de besteiras sobre como sua metodologia é ágil.&lt;br /&gt;&lt;br /&gt;Então, Pete dá a dica com dez lições simples para provar que algo &lt;span style="font-weight: bold;"&gt;não é &lt;/span&gt;ágil (tradução livre resumida com comentários adicionais meus):&lt;br /&gt;&lt;ol start="10"&gt; &lt;li&gt;&lt;p&gt;&lt;b&gt;O "Project Plan" acaba de ser divulgado, mostra o primeiro release acontecendo 18 meses depois do início do projeto.&lt;/b&gt;Num projeto ágil o foco é na atividade cosntante de planejar, não no plano resultante. Não adianta ter datas que não serão cumpridas.&lt;br /&gt;&lt;/p&gt;&lt;/li&gt; &lt;/ol&gt;  &lt;ol start="9"&gt; &lt;li&gt;&lt;p&gt;&lt;b&gt;O gerente de projeto fala sobre artefatos que os analistas vão produzir para os arquitetos.&lt;/b&gt; Modelo Cascata (Waterfall) em cheio. O próximo passo é entregar as especificações de arquitetura aos projetistas, que entregam aos programadores. Isso é tudo, menos ágil (ou bom).&lt;br /&gt;&lt;/p&gt;&lt;/li&gt; &lt;/ol&gt;  &lt;ol start="8"&gt; &lt;li&gt;&lt;p&gt;&lt;b&gt;Arquitetos e analistas afirmam orgulhosamente que não codificaram uma linha sequer no último projeto.&lt;/b&gt; Mostra que se pensa em codificar como atividade trivial. Isso vai totalmente contra o Agile Manifesto, que diz claramente que software funcionando tem mais valor que documentação.&lt;/p&gt;&lt;/li&gt; &lt;/ol&gt;  &lt;ol start="7"&gt; &lt;li&gt;&lt;p&gt;&lt;b&gt;Programadores e testadores estão no nível mais abaixo da cadeia alimentar.&lt;/b&gt; Como no anterior, fazendo isso torna impossível um processo ter Agilidade. Porgramadores são a alma do processo.&lt;br /&gt;&lt;/p&gt;&lt;/li&gt; &lt;/ol&gt;  &lt;ol start="6"&gt; &lt;li&gt;&lt;p&gt;&lt;b&gt;O analista cosntantemente tenta fazer os usuarios assinarem o tal documento dos requerimentos.&lt;/b&gt; Congelar os requisitos é o sonho dequalquer analista, ams isso não vaia cotnecer nunca, não importa que o cliente assine o documento com seu sangue. A proposta Ágil é colaborar com o cliente, não limitar suas escolhas.&lt;/p&gt;&lt;/li&gt; &lt;/ol&gt;  &lt;ol start="5"&gt; &lt;li&gt;&lt;p&gt;&lt;b&gt;Desenvolvedores reclamam quando uma mudança nos requisitos passa por cima do burocrático processo de controle de mudanças.&lt;/b&gt; Processos ágeis acolhem mudanças.&lt;/p&gt;&lt;/li&gt; &lt;/ol&gt;  &lt;ol start="4"&gt; &lt;li&gt;&lt;p&gt;&lt;b&gt;Você está a mais de dois meses no projeto e aidna não foi exibida nenhuma funcionalidade útil aos usuários.&lt;/b&gt; PowerPoint e telas &lt;span style="font-style: italic;"&gt;mock&lt;/span&gt; não contam.&lt;/p&gt;&lt;/li&gt; &lt;/ol&gt;  &lt;ol start="3"&gt; &lt;li&gt;&lt;p&gt;&lt;b&gt;O líder do projeto considera documentação mais importante que comunicação.&lt;/b&gt; Fazer registros em documentos oficiais para poder rastrear o significado de qualquer mudança costuma ter como efeito uma equipe confusa sem a menro noção do que está fazendo (ou do que os outros estão fazendo). Se algo é importante para valer um documento, é importante para ser conhecido por todos.&lt;br /&gt;&lt;/p&gt;&lt;/li&gt; &lt;/ol&gt;  &lt;ol start="2"&gt; &lt;li&gt;&lt;p&gt;&lt;b&gt;Testes e verificação de qualidade não são partes integrantes e respeitáveis do processo.&lt;/b&gt; Ser Ágil é escrever software de qualidade, e a comprovação que um software tem qualidade é dadas de forma prática através de testes. Mesmo empresas com grandes departamentos de QA mutias vezes não elvam a sério esta etapa, deixando a verificação da qualdiade apenas como última etapa, logo antes da entrega.&lt;/p&gt; &lt;p&gt;Finalmente, você finge ser ágil se em seu processo:&lt;/p&gt;&lt;/li&gt; &lt;/ol&gt;  &lt;ol start="1"&gt; &lt;li&gt;&lt;p&gt;&lt;b&gt;Tarefas são dadas a pessoas, que pegam seu trabalho, se isolam num lugar quieto (sua baia) e tratam aquilo como um trabalho solo.&lt;/b&gt;  Num lugar onde as pessoas usam fones de ouvido ou se isolam para não serem perturbados por outros membros do time, você pode apostar que o líder de projeto não entende desenvolvimento colaborativo. Se não entendem o básico disto, podem ter certeza que o processo não é ágil, não importa os quadro-brancos, reuniões em pé ou programação em par.&lt;/p&gt;&lt;/li&gt; &lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6820798-112144428853775164?l=pcalcado.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pcalcado.blogspot.com/feeds/112144428853775164/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6820798&amp;postID=112144428853775164&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112144428853775164'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112144428853775164'/><link rel='alternate' type='text/html' href='http://pcalcado.blogspot.com/2005/07/todo-mundo-gil.html' title='Todo Mundo é Ágil'/><author><name>Shoes</name><uri>http://www.blogger.com/profile/10271507933128080345</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.guj.com.br/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6820798.post-112140595327808622</id><published>2005-07-15T02:18:00.000-03:00</published><updated>2005-07-15T12:44:47.830-03:00</updated><title type='text'>Ferias e Novos Contratos</title><content type='html'>Estou de férias do meu &lt;span style="font-style: italic;"&gt;daily job&lt;/span&gt;, 15 dias, por isso estou meio longe. Sim, eu sou nerd e estou boa parte do dia no computador, ams tenho feito algumas coisas que não são ão ligadas ao meu dia a dia seja de trabalho ou projetos paralelos, então não tem muito o que postar aqui. Minha programaçõa de férias inclui muitas horas de &lt;a href="http://en.wikipedia.org/wiki/Monty_Python"&gt;Monty Python&lt;/a&gt;, comemoração de um ano de namoro, &lt;a href="http://flickr.com/photos/pcalcado/23766286/"&gt;bebedeiras&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Catan"&gt;Catan &lt;/a&gt;e outros jogos, coisa que há muito eu tenho deixado de fazer.&lt;br /&gt;&lt;br /&gt;Ok, estou sempre no &lt;a href="http://www.guk.com.br/"&gt;GUJ&lt;/a&gt; e na &lt;a href="http://www.riojug.org/"&gt;RioJUG&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Hoje a noite resolvi dar uma reformatada em alguns dos textos que tem por aqui. Fiz um modelo gráfico para usar, modifiquei a formatação (e alterei o texto em algumas partes) do &lt;span style="font-style: italic;"&gt;Contratos Nulos&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;feedback, please!&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;A versão nova está &lt;a href="http://www.fragmental.com.br/arquivos/contratosnulos.pdf"&gt;aqui&lt;/a&gt;.&lt;br /&gt;As versões antigas estão fora do ar.&lt;br /&gt;&lt;br /&gt;Já tenho tema para um próximo textinho, vamos ver quando a vontade se junta a possibilidade :P&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6820798-112140595327808622?l=pcalcado.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pcalcado.blogspot.com/feeds/112140595327808622/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6820798&amp;postID=112140595327808622&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112140595327808622'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112140595327808622'/><link rel='alternate' type='text/html' href='http://pcalcado.blogspot.com/2005/07/ferias-e-novos-contratos.html' title='Ferias e Novos Contratos'/><author><name>Shoes</name><uri>http://www.blogger.com/profile/10271507933128080345</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.guj.com.br/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6820798.post-112094500464699442</id><published>2005-07-09T18:31:00.000-03:00</published><updated>2005-07-09T18:36:44.653-03:00</updated><title type='text'>Mac</title><content type='html'>Continuando o papo sobre &lt;a href="http://pcalcado.blogspot.com/2005/05/extreme-freelancer-guia-de-guerra-para.html"&gt;freelancers&lt;/a&gt;, eu tive péssima experiência como emrpeendedor (imaturidade, provavelmente), mas &lt;a href="http://wilshipley.com/blog/WWDC_Student_Talk.pdf"&gt;essa apresentação&lt;/a&gt; de &lt;a href="http://wilshipley.com/blog/"&gt;Wil Shipley&lt;/a&gt; fala bem ao estilo do post. Claro que é focado no mercado americano e fala sobre o bizarro mundo dos ISV para Macintosh, mas é leitura obrigatória para uma visão diferente e algumas risadas.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6820798-112094500464699442?l=pcalcado.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pcalcado.blogspot.com/feeds/112094500464699442/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6820798&amp;postID=112094500464699442&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112094500464699442'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112094500464699442'/><link rel='alternate' type='text/html' href='http://pcalcado.blogspot.com/2005/07/mac.html' title='Mac'/><author><name>Shoes</name><uri>http://www.blogger.com/profile/10271507933128080345</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.guj.com.br/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6820798.post-112082297145728253</id><published>2005-07-08T08:41:00.000-03:00</published><updated>2005-07-08T08:42:51.463-03:00</updated><title type='text'>Eu já sabia!</title><content type='html'>Se você ver minha lista no &lt;a href="http://www.audioscrobbler.com/user/pcalcado/"&gt;AudioScrobbler &lt;/a&gt;vai ver que eu já sabia &lt;a href="http://www.usatoday.com/life/columnist/popcandy/2005-07-05-pop-candy_x.htm"&gt;disso&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;Ok ,ok, sem flames, eu sei que é exageiro, mas de que Pearl Jam  é &lt;span style="font-weight: bold;"&gt;MUITO&lt;/span&gt; bom, disso não há qualquer dúvida :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6820798-112082297145728253?l=pcalcado.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pcalcado.blogspot.com/feeds/112082297145728253/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6820798&amp;postID=112082297145728253&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112082297145728253'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112082297145728253'/><link rel='alternate' type='text/html' href='http://pcalcado.blogspot.com/2005/07/eu-j-sabia.html' title='Eu já sabia!'/><author><name>Shoes</name><uri>http://www.blogger.com/profile/10271507933128080345</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.guj.com.br/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6820798.post-112076062861317139</id><published>2005-07-07T15:23:00.000-03:00</published><updated>2005-07-07T15:23:48.616-03:00</updated><title type='text'>Wow!</title><content type='html'>Dá para acreditar &lt;a href="http://en.wikipedia.org/wiki/2005_London_transport_explosions"&gt;nisso&lt;/a&gt;?&lt;br /&gt;&lt;br /&gt;Nota: são 15:18, os atentados ocorreram por volta de 8:51.&lt;br /&gt;&lt;br /&gt;Da &lt;a href="http://www.webopedia.com/TERM/w/wiki.htm"&gt;Webopedia&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;wiki&lt;/span&gt;&lt;br /&gt;Last modified: Friday, June 24, 2005&lt;br /&gt;(n.) A collaborative Web site comprises the perpetual collective work of many authors. Similar to a blog in structure and logic, a wiki allows anyone to edit, delete or modify content that has been placed on the Web site using a browser interface, including the work of previous authors. In contrast, a blog, typically authored by an individual, does not allow visitors to change the original posted material, only add comments to the original content.&lt;br /&gt;&lt;br /&gt;The term wiki refers to either the Web site or the software used to create the site.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;Wiki wiki means “quick” in Hawaiian. The first wiki was created by Ward Cunnigham in 1995. &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6820798-112076062861317139?l=pcalcado.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pcalcado.blogspot.com/feeds/112076062861317139/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6820798&amp;postID=112076062861317139&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112076062861317139'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112076062861317139'/><link rel='alternate' type='text/html' href='http://pcalcado.blogspot.com/2005/07/wow_07.html' title='Wow!'/><author><name>Shoes</name><uri>http://www.blogger.com/profile/10271507933128080345</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.guj.com.br/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6820798.post-112056960092854079</id><published>2005-07-05T09:35:00.000-03:00</published><updated>2005-07-05T14:45:57.210-03:00</updated><title type='text'>O SOA Nosso de Cada Dia</title><content type='html'>Você ouve, ouve, ouve... mas cadê o &lt;a href="http://webservices.xml.com/pub/a/ws/2003/09/30/soa.html"&gt;SOA&lt;/a&gt; de verdade?&lt;br /&gt;&lt;br /&gt;Assim como os componentes que nos prometeram que iam abundar as prateleiras, o tal do SOA parece não sair do papel, primeiro dos PDFs de &lt;a href="http://www.google.com/search?hl=en&amp;lr=&amp;amp;safe=off&amp;biw=1280&amp;amp;q=soa+pdf+thesis&amp;btnG=Search"&gt;teses acadêmicas&lt;/a&gt;, agora do papel brilhante e caro das &lt;a href="http://info.abril.com.br/corporate/revista/21.shtml"&gt;revistas &lt;/a&gt;"top de linha".&lt;br /&gt;&lt;br /&gt;Mas, assim  como a componentização, só parece que não está acontecendo. Olhe em volta.&lt;br /&gt;&lt;br /&gt;O problema dos componentes e todo o hype formado ao redor deles foi que os componentes tomaram outra forma. Componentes de lógica de negócio são raros, mas qualquer outra coisa pode ser comprada ou obtida de terceiros (ninguém que eu tenha lido falava em como o software livre iria influenciar o mercado de componentes), de &lt;a href="http://ireport.sourceforge.net/"&gt;geradores de relatórios&lt;/a&gt; até &lt;a href="http://jakarta.apache.org/commons/httpclient/"&gt;clientes HTTP&lt;/a&gt;, raramente se precisa escrever algum componente de baixo nível hoje em dia, basta procurar um pronto.&lt;br /&gt;&lt;br /&gt;E o SOA? Você já reparou que estamos vivendo na onda das APIs?&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;Com a &lt;a href="http://www.google.com/apis/"&gt;API do Google Search&lt;/a&gt;, você pode fazer buscas no Google em sua aplicação.&lt;/li&gt;   &lt;li&gt;Com a &lt;a href="http://www.flickr.com/services/api/"&gt;API do Flickr&lt;/a&gt;, você pode manipular seu álbum de fotos.&lt;/li&gt;   &lt;li&gt;A &lt;a href="http://www.blogger.com/developers/api/1_docs/"&gt;API do Blogger&lt;/a&gt; permite criar e editar posts no seu blog.&lt;/li&gt;   &lt;li&gt;A &lt;a href="http://www.google.com/apis/maps/"&gt;API do Google Maps&lt;/a&gt; permite você fazer &lt;a href="http://moloko.itc.it/paoloblog/archives/2005/07/01/animated_invasion_over_google_map.html"&gt;coisas loucas&lt;/a&gt; com as fotos de qualquer lugar do mundo.&lt;/li&gt;   &lt;li&gt;A &lt;a href="http://del.icio.us/doc/api"&gt;API do del.icio.us&lt;/a&gt; permite gerenciar bookmarks.&lt;/li&gt;&lt;li&gt;A &lt;a href="http://bloglines.com/services/api/"&gt;API do Bloglines&lt;/a&gt; permite manipular o agregador RSS (obrigado pelo lembrança, Diego ;) )&lt;br /&gt;  &lt;/li&gt;  &lt;/ul&gt;&lt;br /&gt;E muitas outras, estãos são apenas as dos sites que eu uso constantemente.&lt;br /&gt;&lt;br /&gt;Perceba um padrão: são sites. Eles têm uma interface (no caso do flickr uma interface digna de respeito), e teoricamente seu serviço deveria incluir o uso desta. Uhm...deveria?&lt;br /&gt;&lt;br /&gt;O que estes sites "vendem" &lt;span style="font-weight: bold;"&gt;não&lt;/span&gt; é a interface. O que o Google Search oferece não é uma caixinha de texto, &lt;span style="font-weight: bold;"&gt;é uma pesquisa na internet&lt;/span&gt;! O maps fotos por satélite e mapas interativos, o flickr organização de fotos por tags... etc.&lt;br /&gt;&lt;br /&gt;Isso já atinge o desenvolvedor diretamente em como é importante separar interface de negócio. Interfaces mudam e a tendência hoje é ter algo como o del.icio.us, uma interface web bem fraquinha, mas uma senhora API que pode ser extendida em por browsers, aplicativos desktop e outros sites.&lt;br /&gt;&lt;br /&gt;Esqueça a era do VB (ou Delphi se você, como acredito que sim, mora no Brasil ou Rússia). Com o advento dos computadores baratos com monitores coloridos, interface amigável virou lei, a lógica era o de menos (ok, geralmente é o bom e velho "coloca-no-banco-lista-tira-do-banco"). Hojeelinhas bonitinhas são facilmente construídas em segundos com editores gráficos, &lt;span style="font-weight: bold;"&gt;a lógica de negócios e a integração destas é o que importa&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Essas APIs são baseadas em protocolos leves sobre HTTP, que apesar de bem problemático para aplicações de verdade continua sendo padrão na Internet. Por enquanto, são serviços únicos mas logo em breve você poderá solicitar uma pesquisa assim:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;   &lt;li&gt;Envia ao Yahoo! e Google um pedido de numero de resutlados para pesquisar "frango da malasia"&lt;/li&gt;   &lt;li&gt;Yahoo! informa que achou &lt;strong style="font-weight: normal;"&gt;482 &lt;/strong&gt;resultados, Google 379.&lt;/li&gt;   &lt;li&gt;Você cancela a pesquisa no Google e pede os resultados do Yahoo!&lt;/li&gt;   &lt;li&gt;O Yahoo! debita o referente a consulta (seja dinheiro, seja númerod e consultas/dia) e retorna os resultados num formato XML&lt;/li&gt; &lt;/ol&gt;&lt;br /&gt;Sua aplicação final (o que 99% dos programadores vai fazer nas empresas) vai ser uma telinha chamando serviços disponíveis na rede da empresa e emr edes externas. &lt;span style="font-weight: bold;"&gt;Hoje você já pode fazer isso.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Bom, eu sou técnico, mas vamos tentar dar uns palpites no ramo dos negócios.&lt;br /&gt;&lt;br /&gt;Todos os citados acima são serviços gratuitos ou possuem versões gratuitas. Imaginar um modelo de negócios viável para serviços não é difícil, se baseie em coisas do mundo real. Quando você compra um ticket do metrô, você não compra nada além do serviço de transporte.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Venda tickets para sua aplicação.&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6820798-112056960092854079?l=pcalcado.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pcalcado.blogspot.com/feeds/112056960092854079/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6820798&amp;postID=112056960092854079&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112056960092854079'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112056960092854079'/><link rel='alternate' type='text/html' href='http://pcalcado.blogspot.com/2005/07/o-soa-nosso-de-cada-dia.html' title='O SOA Nosso de Cada Dia'/><author><name>Shoes</name><uri>http://www.blogger.com/profile/10271507933128080345</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.guj.com.br/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6820798.post-112048048702741188</id><published>2005-07-04T08:49:00.000-03:00</published><updated>2005-07-04T10:19:35.783-03:00</updated><title type='text'>Homo Burocraticus</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Esse texto desconexo é um desabafo.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;É impressionante como conceitos enganam. O &lt;a href="http://www.crea-mt.org.br/mostrar_noticias.asp?id=799"&gt;Homo Burocraticus&lt;/a&gt; prevalece nas empresas do mundo todo, e raramente alguém percebe que tem algo errado. Será que é evolução?&lt;br /&gt;&lt;br /&gt;Você já o viu, certamente. Talvez na baia ao lado, talvez na &lt;span style="font-weight: bold;"&gt;sua&lt;/span&gt; baia. Esta espécie está sempre atrás do mais novo relatório XYZ, sempre querendo saber por que o documento ASD-00321.8 não está marcado para revisão.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.dilbert.com/comics/dilbert/archive/images/dilbert2005071744002.gif"&gt;&lt;img style="width: 455px; height: 159px;" src="http://www.dilbert.com/comics/dilbert/archive/images/dilbert2005071744002.gif" alt="Today's Dilbert Comic" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;As pessoas criaram &lt;a href="http://www-306.ibm.com/software/awdtools/rup/"&gt;processos &lt;/a&gt;para tentar fazer profissionais de todos os níveis trablharem bem. A idéia é simples: force os programadores medíocres a seguirem um conjunto de processos pré-definidos e burocráticos e eles não terão chance de fazer besteira. Os bons profissionais, como dizem, serão bons em qualquer processo.&lt;br /&gt;&lt;br /&gt;Este ambiente criou espaço para uma raça enfadonha que se esconde atrás do processo. Você tem que acreditar no processo, o processo é tudo, é ele quem produz software, não as pessoas.&lt;br /&gt;&lt;br /&gt;Reconhecer um ambiente assim é simples, basta ver quando um projeto possui como marco documentação. Note: documentação é importante o suficiente para perder tempo escrevendo-a, mas quando se dá às especificações o mesmo valor que funcionalidade implementada ou qualidade, nós ou estamos construindo um prédio ou estamos em maus lençóis.&lt;br /&gt;&lt;br /&gt;Neste lugar, as reuniões são com as mesmas reclamações: "Não pude implementar ABC porque a especificação ainda está em revisão", "Err.. eu não sabia que não dava pra fazer o módulo B daquele jeito, vou ter que mudar a especificação e isso vai alterar outras coisas"... no fim das contas, sua especificação fica defasada e não serve para nada. Ok, depois você conserta, só que "depois" nunca chega, quando chegar a hora de fazer isso ou já tem projeto novo ou as pessoas deixam o time.&lt;br /&gt;&lt;br /&gt;Ao invés de medir a qualidade pelo número de páginas ou abrangência de sua documentação, foque na única documentação que sempre está atualizada: o código. As linguagens de programação de hoje possuem um nível tão alto que já são auto-documentáveis.&lt;br /&gt;&lt;br /&gt;Para manter seu código legível o uficiente para servir de documentação crie testes, pratique Domain Driven Design e refatore sempre.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Crie Testes&lt;/span&gt;&lt;br /&gt;Programar orientado a testes é uma técnica muito boa, isso já foi dito em &lt;a href="http://www.junit.org/news/article/index.htm"&gt;muitos lugares&lt;/a&gt; e não vou justificar novamente aqui.&lt;br /&gt;&lt;br /&gt;Mas criar um teste unitário é utilizar um componente. Fazendo isso, você exercita a interface pública deste e diz quis as condições de erro e de acerto. Uma pessoa nova no projeto que lê o teste já sabe como a classe funciona e quando ela quebra do ponto de vista do usuário.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Pratique Domain Driven Design&lt;br /&gt;&lt;/span&gt;Neste contexto, &lt;a href="http://domaindrivendesign.org/"&gt;DDD &lt;/a&gt;é programar para o domínio. Quando você usa esta técnica, seu software (sua &lt;span style="font-style: italic;"&gt;camada de negócios&lt;/span&gt; quase sempre) reflete o conhecimento do domínio do seu usário, você modela os conceitos do problema de uma maneira clara no software.&lt;br /&gt;&lt;br /&gt;Ao invés de simplesmente criar estruturas de dados e algoritmos, você implementa conceitos e através deles cria um entendimento muito maior sobre o que seu sistema faz para seus usuários, você e para quem for ler seu programa.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Refatore&lt;br /&gt;&lt;/span&gt;Refatorando seu código você em primeiro lugar exercita ele na sua cabeça. Para pessoas como eu que simplesmente não conseguem lembrar coisas, isso é inestimável.&lt;br /&gt;&lt;br /&gt;Depois, você aumenta a qualidade do código. Quem ler seu código em seguida vai ter muito mais clareza do que quem leu aquela primeira versão, feita com um prazo curto e pressão de gerentes e usuários.&lt;br /&gt;&lt;br /&gt;São medidas simples e aplicáveis em qualquer lugar, não é rpeciso que se tenha um processo XP, A, B  ou Z.&lt;br /&gt;&lt;br /&gt;Se você está preso num lugar onde especificações detalhadas são a ordem da casa, tente criar documentos mais abstratos (aposto que ninguém vai reparar). Não detalhe processos, documente apenas a interface externa do seu componente (que provavelmente outra pessoa vai precisar usar) e descreva em poucas palavras(ou diagramas) o funcionamento interno, utilize o encapsulamento aqui, faça a especificação ser uma interface do seu componente.&lt;br /&gt;&lt;br /&gt;Tente colocar uma referência aos testes unitários como parte da documentação, apenas diga onde podem ser encontrados e, talvez (depende do ambiente) como executá-los. Se você está especificando para outro implementar, este pode se guiar pelos testes para entender o que você quis dizer.&lt;br /&gt;&lt;br /&gt;Mantenha o documento aberto junto com o código (se sua memória RAM deixar, claro, do contrário imprima uma cópia e use caneta e marcador de texto), e quando for mudar algo drástico, mude o documento na hora. Como você escreveu de maneira abstrata, mudanças na implementação (que são mais comuns do que na interface, queira o bom Zahl) não devem alterar muito o documento.&lt;br /&gt;&lt;br /&gt;Não crie documentação que pode ser gerada automaticamnete, como diagramas de classe. Não crie documentação só por criar, se não precisa usar, não crie.&lt;br /&gt;&lt;br /&gt;Se você é gerente de projeto, por favor aprenda a medir o andamento do seu projeto de software através de métricas reais. Não sei se você reparou, mas PDF e documento Word não compila, não roda e não dá funcionalidade. O número de diagramas num documento é proporcional ao trabalho que dá atualizar tudo depois e, acredite, tudo vai precisar ser atualizado depois.&lt;br /&gt;&lt;br /&gt;Note que eu não estou dizendo para você não especificar ou documentar, estou dizendo para você não gastar esforço em coisas que não trarão valor.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6820798-112048048702741188?l=pcalcado.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pcalcado.blogspot.com/feeds/112048048702741188/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6820798&amp;postID=112048048702741188&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112048048702741188'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112048048702741188'/><link rel='alternate' type='text/html' href='http://pcalcado.blogspot.com/2005/07/homo-burocraticus.html' title='Homo Burocraticus'/><author><name>Shoes</name><uri>http://www.blogger.com/profile/10271507933128080345</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.guj.com.br/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6820798.post-112047770907935221</id><published>2005-07-04T08:47:00.000-03:00</published><updated>2005-07-04T08:48:29.086-03:00</updated><title type='text'>É impressionante....</title><content type='html'>Como o &lt;a href="http://www.orkut.com/Profile.aspx?uid=2401274391088317157"&gt;orkut &lt;/a&gt;só funciona decentemente entre 6 e 9 horas da manhã GMT -3...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6820798-112047770907935221?l=pcalcado.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pcalcado.blogspot.com/feeds/112047770907935221/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6820798&amp;postID=112047770907935221&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112047770907935221'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112047770907935221'/><link rel='alternate' type='text/html' href='http://pcalcado.blogspot.com/2005/07/impressionante.html' title='É impressionante....'/><author><name>Shoes</name><uri>http://www.blogger.com/profile/10271507933128080345</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.guj.com.br/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6820798.post-112033207056894255</id><published>2005-07-02T16:10:00.000-03:00</published><updated>2005-07-02T16:21:18.966-03:00</updated><title type='text'>JSP Virou Coisa de Gente Grande</title><content type='html'>Há um bom tempo eu não criava interfaces HTML.&lt;br /&gt;&lt;br /&gt;Minhas últimas experiências com HTML, JSP e JSTL foram horríveis, e eu esperava não ter que usar isso tão cedo. Das útlimas vezes havia usado o &lt;a href="http://jakarta.apache.org/velocity/"&gt;Velocity &lt;/a&gt;para tentar fugir desta coisa horrível.&lt;br /&gt;&lt;br /&gt;Eu gosto do Velocity não só por ser mais simples mas porque ele não te induz a colocar lógica em páginas, como scriptlets fazem. Como muitos parecem não saber:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Você não deveria, em hipótese alguma, usar JSP, Velocity, &lt;a href="http://freemarker.sourceforge.net/"&gt;Freemarker &lt;/a&gt;ou qualquer outra coisa do gênero para qualquer outro fim que não seja gerar HTML dinâmicamente. A única finalidade destas tecnologias é criar HTML, não fazer processamento.&lt;/blockquote&gt;No meu último projeto, tive que criar uma simples interface web para a gerência de alguns parâmetros do sistema (que utiliza HTTP para sua atividade principal, mas troca mensagens em XML, não HTML) e como não tive muita escolha, resolvi usar as ferramentas padrão J2EE (como &lt;span style="font-weight: bold;"&gt;sempre&lt;/span&gt;, haviam sugerido Struts para uma aplicação CRUD com meia dúzia de páginas e servlets).&lt;br /&gt;&lt;br /&gt;Me surpreenndi. Sério.&lt;br /&gt;&lt;br /&gt;Claro que como estou sempre em fórums, eventos, palestras já conhecia JSTL, mas eu não sabia que ia efetivamente me dar &lt;span style="font-weight: bold;"&gt;prazer&lt;/span&gt; em usar. Apesar de eu não precisar de muitos recursos, a aplicação ficou bem limpinha e fácil de manter. Para aproveitar e aprender mais, resolvi fazer a interface &lt;a href="http://www.tableless.com.br/"&gt;tableless&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Eu ainda odeio fazer interface web, mas posso dizer que (como, aliás, já &lt;a href="http://www.guj.com.br/posts/list/26575.java"&gt;disseram no GUJ outro dia&lt;/a&gt;) pode-se usar JSP sem perder os poucos cabelos que restam no pobre programador.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6820798-112033207056894255?l=pcalcado.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pcalcado.blogspot.com/feeds/112033207056894255/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6820798&amp;postID=112033207056894255&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112033207056894255'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112033207056894255'/><link rel='alternate' type='text/html' href='http://pcalcado.blogspot.com/2005/07/jsp-virou-coisa-de-gente-grande.html' title='JSP Virou Coisa de Gente Grande'/><author><name>Shoes</name><uri>http://www.blogger.com/profile/10271507933128080345</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.guj.com.br/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6820798.post-112033118672665042</id><published>2005-06-30T13:00:00.000-03:00</published><updated>2005-07-02T16:07:14.736-03:00</updated><title type='text'>Troca de Contexto</title><content type='html'>Como falei &lt;a href="http://pcalcado.blogspot.com/2005/06/casos-de-uso-conhea-para-criticar.html"&gt;antes&lt;/a&gt;, eu estava lendo um livro sobre casos de uso do RUP, mas acabam de me devolver o &lt;a href="https://ssl.plugin.com.br/temporeal/produtos.php?id=166790"&gt;Agile Software Development&lt;/a&gt;, do &lt;a href="http://butunclebob.com/"&gt;Uncle Bob&lt;/a&gt;. Esse livro é dos primórdios do &lt;a href="http://www.agilemanifesto.org/"&gt;Manifesto Ágil&lt;/a&gt;, muito bem recomendado e parece ser excelente!&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="https://ssl.plugin.com.br/temporeal/imagens/produtos/0135974445.jpg" border="0" /&gt;&lt;br /&gt;&lt;/div&gt; Com prefácio de Erich Gama, o livro tem uma abordagem informal baseada em estudos de caso. Cheguei na parte onde o manifesto é explicado, excelente escrita, coisa que você deveria mostrar ao seu gerente.&lt;br /&gt;&lt;br /&gt;Estava pretendendo pegar um livro mais "escovador de bytes" (tem um &lt;a href="http://www.cs.vu.nl/%7East/books/ds1/"&gt;Tanenbaum&lt;/a&gt; me esperando lá em casa há algum tempo), mas não resisti.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6820798-112033118672665042?l=pcalcado.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pcalcado.blogspot.com/feeds/112033118672665042/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6820798&amp;postID=112033118672665042&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112033118672665042'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112033118672665042'/><link rel='alternate' type='text/html' href='http://pcalcado.blogspot.com/2005/06/troca-de-contexto.html' title='Troca de Contexto'/><author><name>Shoes</name><uri>http://www.blogger.com/profile/10271507933128080345</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.guj.com.br/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6820798.post-112013864866798030</id><published>2005-06-30T10:18:00.000-03:00</published><updated>2005-06-30T10:37:28.673-03:00</updated><title type='text'>E o JavaBlogs.com.br?</title><content type='html'>No ano passado, uma &lt;a href="http://www.portaljava.com.br/home/modules.php?name=News&amp;file=article&amp;amp;sid=919"&gt;iniciativa em conjunto&lt;/a&gt; do &lt;a href="http://www.guj.com.br"&gt;GUJ &lt;/a&gt;e &lt;a href="http://www.portaljava.com.br"&gt;Portal Java&lt;/a&gt; produziu o &lt;a href="http://www.jablo.com.br/"&gt;jablo&lt;/a&gt; (quando fui no &lt;a href="http://www.conexaojava.com.br/"&gt;Conexão Java&lt;/a&gt; 2004, descobri que os paulistas pseudo-franceses falam "jablô", né dqo? :D), um portal de blogs brasileiros sobre Java (mas ate´blog não relacionado a java tinha, apesar de todos 90% técnicos).&lt;br /&gt;&lt;br /&gt;Por um milhão de motivos, o site caia diariamente, não se conseguia logar, &lt;a href="http://www.guj.com.br/posts/list/15357.java"&gt;não funcionava por algumas semanas&lt;/a&gt;, ia e voltava... mas foi um &lt;a href="http://www.guj.com.br/posts/list/12581.java"&gt;sucesso&lt;/a&gt;. Nunca a comunidade brasileira produziu tanto conteúdo, dezenas de blogs com pessoas de dviersos níveis de conhecimento postando diariamente sobre os problemas em seus projetos, as soluções que adotavam, tecnologias novas, tutoriais e até &lt;a href="http://www.jablo.com.br/search?q=mijandopreto"&gt;polêmicas&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Enfim, após todos os problemas, o Jablo saiu do ar. Ele até voltou, mas cadê a comunidade? Parece que as idas e vindas do sistema tiraram a credibilidade do projeto. Eu mesmo &lt;a href="http://www.jablo.com.br/page/pcalcado"&gt;tinha um blog &lt;/a&gt;bem ativo por lá, e acabei aqui. O blogger tem menos recursos, mais restrições, mas ainda não vi cair.&lt;br /&gt;&lt;br /&gt;Só eu sinto falta da época de ouro dos JavaBlogs?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6820798-112013864866798030?l=pcalcado.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pcalcado.blogspot.com/feeds/112013864866798030/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6820798&amp;postID=112013864866798030&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112013864866798030'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/112013864866798030'/><link rel='alternate' type='text/html' href='http://pcalcado.blogspot.com/2005/06/e-o-javablogscombr.html' title='E o JavaBlogs.com.br?'/><author><name>Shoes</name><uri>http://www.blogger.com/profile/10271507933128080345</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.guj.com.br/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6820798.post-111989391017170271</id><published>2005-06-27T14:36:00.000-03:00</published><updated>2005-06-27T14:38:30.173-03:00</updated><title type='text'>JavaOne 2005: Acompanhe no Flickr!</title><content type='html'>Dica do dia: Se você, como eu, não tem grana pra bancar uma ida ao JavaOne, pode babar nos brindes maravilhosos diretamente no &lt;a href="http://www.flickr.com/groups/javaone2005/pool/show/"&gt;slideshow do flickr&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div id="photoImgDiv21742249" style="width: 335px; text-align: center;" class="photoImgDiv"&gt;&lt;img src="http://photos17.flickr.com/21742249_6f3fe62de1.jpg?v=0" alt="" onload="show_notes_initially()" height="500" width="333" /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6820798-111989391017170271?l=pcalcado.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pcalcado.blogspot.com/feeds/111989391017170271/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6820798&amp;postID=111989391017170271&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/111989391017170271'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/111989391017170271'/><link rel='alternate' type='text/html' href='http://pcalcado.blogspot.com/2005/06/javaone-2005-acompanhe-no-flickr.html' title='JavaOne 2005: Acompanhe no Flickr!'/><author><name>Shoes</name><uri>http://www.blogger.com/profile/10271507933128080345</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.guj.com.br/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6820798.post-111989318264180259</id><published>2005-06-27T14:16:00.000-03:00</published><updated>2005-06-27T14:26:22.650-03:00</updated><title type='text'>Casos de Uso: Conheça para Criticar</title><content type='html'>Acabei de ler o livro do Riel na sexta. O livro era bom há uns dez anos atrás, mas agora está meio fora de foco. Muitos dos problemas apresentados são resolvidos com Design Patterns simples (quase sempre &lt;a href="http://home.earthlink.net/%7Ehuston2/dp/observer.html"&gt;Observer&lt;/a&gt;), mas eu acho que seria legal como o segundo livro de alguém sobre OO. Exige conhecimentos básicos de C++.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.temporeal.com.br/imagens/produtos/020163385X.jpg" border="0" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Enquanto o mundo do software espera as notícias que vem de &lt;a href="http://java.sun.com/javaone/"&gt;San Francisco&lt;/a&gt; (e&lt;a href="http://www.guj.com.br/posts/list/26625.java"&gt; algumas já estão disponíveis&lt;/a&gt;) eu comecei a ler um livro que tem muito pouco a ver com meu perfil: &lt;a href="http://www.amazon.com/exec/obidos/tg/detail/-/0201709139/002-1255397-7802425?v=glance"&gt;Use Case Modeling&lt;/a&gt;. Não, eu não estou trabalhando na IBM nem usando RUP, mas como quase todo infeliz eu sou obrigado a utilizar processos parecidos com o RUP/UP.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img style="width: 165px; height: 212px;" alt="The image “http://images.amazon.com/images/P/0201709139.01._SCLZZZZZZZ_.jpg” cannot be displayed, because it contains errors." src="http://images.amazon.com/images/P/0201709139.01._SCLZZZZZZZ_.jpg" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Não me entenda mal, nada contra casos de uso em si, apenas que a aplicação e o excessod e detalhes que eles são tratados no RUP além da divisão de papéis entre Analista, Projetista, peão e motorista de van me agride.&lt;br /&gt;&lt;br /&gt;De qualquer forma, este livro parece que vai me ensinar algo a mais sobre os artefatos de análise do RUP. O processo em si tem seu lado bom (por ser um processo já é bom), e tirando o fato do autor usar setinhas no diagrama de caso de uso tem sido interessante nos dois primeiros capítulos.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6820798-111989318264180259?l=pcalcado.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pcalcado.blogspot.com/feeds/111989318264180259/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6820798&amp;postID=111989318264180259&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/111989318264180259'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/111989318264180259'/><link rel='alternate' type='text/html' href='http://pcalcado.blogspot.com/2005/06/casos-de-uso-conhea-para-criticar.html' title='Casos de Uso: Conheça para Criticar'/><author><name>Shoes</name><uri>http://www.blogger.com/profile/10271507933128080345</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.guj.com.br/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6820798.post-111901793493736614</id><published>2005-06-17T11:05:00.000-03:00</published><updated>2005-06-17T11:19:30.496-03:00</updated><title type='text'>Regras são Regras</title><content type='html'>E tem gente que questiona porque cosntruir um Domain Model e uma camada de negócios consistente é importante. Leia o &lt;a href="http://portaljava.locaweb.com.br/home/modules.php?name=Forums&amp;file=viewtopic&amp;amp;t=18307&amp;start=0&amp;amp;postdays=0&amp;postorder=asc&amp;amp;highlight=&amp;sid=447e857d41d19cc1275fd373203c9aaa"&gt;post no Portal Java&lt;/a&gt; e você vai ver um problema bem interessante.&lt;br /&gt;&lt;br /&gt;No caso específico, alguém implementou regras de negócio em Actions Struts. Muito bom, exceto pelo fato que isso gera:&lt;br /&gt;&lt;ol&gt;   &lt;li&gt;Acoplamento exacerbado ao framework e consequentemente ao HTTP&lt;br /&gt;&lt;/li&gt;   &lt;li&gt;Programação altamente procedural (&lt;a href="http://www.fragmental.com.br/arquivos/fantoches.pdf"&gt;qual a diferença entre uma Action e uma função?&lt;/a&gt;)&lt;br /&gt; &lt;/li&gt; &lt;/ol&gt; Não, escolher outro framework não é a solução (mesmo que seja o Spring). O importante é saber que estas regras devem estar separadas em sua própria camada, modeladas através de objetos de negócio.&lt;br /&gt;&lt;br /&gt;Bom, esse caso específico pede uma medida imediata que evite reescrever a lógica da aplicação toda novamente. Uma soluções é usar adaptadores.&lt;br /&gt;&lt;br /&gt;Se você tem uma &lt;span style="color: rgb(51, 51, 153);font-family:courier new;" &gt;AdicionarUsuarioAction&lt;/span&gt;, uma &lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;RemoverUsuarioAction&lt;/span&gt;, por exemplo, pode criar uma interface assim:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 153);font-family:courier new;" &gt;public interface GerenciadorUsuario{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 153);font-family:courier new;" &gt; public adicionar(Usuario u);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 153);font-family:courier new;" &gt; public remover(Usuario u);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 153);font-family:courier new;" &gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Todo código novo do seu sistema deve usar essa interface. O próximo passo é criar um Adapter para suas Actions, e isso mostra o que o acoplamento faz por você:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 153);font-family:courier new;" &gt;public GerenciadorUsuarioAdapter{&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 153);font-family:courier new;" &gt; public void adicionar(Usuario u){&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 153);font-family:courier new;" &gt;  RequestAdapter req = new RequestAdapter();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 153);font-family:courier new;" &gt;  requestAdapter.setParameter("login", usuario.getLogin());&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 153);font-family:courier new;" &gt;   ResponseAdapter resp = new ResponseAdapter();&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 153);font-family:courier new;" &gt;  executarAction(AdicionarUsuario.class, req, resp);  &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 153);font-family:courier new;" &gt; }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 153);font-family:courier new;" &gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Uma bela gambiarra.&lt;span style="color: rgb(51, 51, 255);"&gt; &lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;Request&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);"&gt; &lt;/span&gt;&lt;/span&gt;e&lt;span style="color: rgb(0, 0, 153);"&gt; &lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;&lt;span style="color: rgb(0, 0, 153);"&gt;ResponseAdapter&lt;/span&gt; &lt;/span&gt;são implementações do HTTP request e HTTP response. &lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;executarAction(Class, HttpRequest, HttpResponse) &lt;/span&gt;faz a chamada à Action emulando um ambiente web.&lt;br /&gt;&lt;br /&gt;A melhor solução, &lt;span style="font-weight: bold;"&gt;claro&lt;/span&gt;, continua sendo refatroar o código e remover a lógica de negócios do Struts. Não, não adianta colcoar esta no WebWork, XWork, Spring... o que importa é colocá-la em um Domain Model consistente e reaproveitável, mas Domain Model é assunto apra outro post.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6820798-111901793493736614?l=pcalcado.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pcalcado.blogspot.com/feeds/111901793493736614/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6820798&amp;postID=111901793493736614&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/111901793493736614'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/111901793493736614'/><link rel='alternate' type='text/html' href='http://pcalcado.blogspot.com/2005/06/regras-so-regras.html' title='Regras são Regras'/><author><name>Shoes</name><uri>http://www.blogger.com/profile/10271507933128080345</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.guj.com.br/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6820798.post-111901574112315013</id><published>2005-06-17T10:30:00.000-03:00</published><updated>2005-06-17T10:42:21.126-03:00</updated><title type='text'>Subversivo</title><content type='html'>Sim, sou mais um adepto do "&lt;a href="http://subversion.tigris.org/"&gt;CVS melhorado&lt;/a&gt;".&lt;br /&gt;&lt;br /&gt;Precisava de um modo de armazenar alguns projetos open-source e outros fechados e acessá-los de qualquer lugar. Para os livres até poderia usar o &lt;a href="http://www.java.net"&gt;java.net&lt;/a&gt; (na verdade eu uso, o Subversion é um proxy) ou &lt;a href="http://www.sf.net"&gt;sf.net&lt;/a&gt;, masnem todo lugar permite acesso á protas "estanhas" como as do CVS. Decidi então colocar um no meu PC em casa, um P4 normal e mixuruca com ADSL 512kbps ligado 24/7.&lt;br /&gt;&lt;br /&gt;Eu tinha até instalado o &lt;a href="http://www.cvsnt.com/cvspro/"&gt;cvsnt&lt;/a&gt;, mas decidi testar o SVN. Segui os passos do &lt;a href="http://www.guj.com.br/java.tutorial.artigo.170.1.guj"&gt;tutorial do Heitor Rapcinski no GUJ&lt;/a&gt;, e a instalação foi super simples. Apenas alterei a porta do servidor para 80 e pronto. O acesso está bem estável e muito mais rápido que o CVS do java.net e sf.net :P&lt;br /&gt;&lt;br /&gt;Controle de Versão é uma das práticas do &lt;a href="http://en.wikipedia.org/wiki/SCM"&gt;SCM&lt;/a&gt; que mais são usadas hoje. É simplesmente loucura pensar em alguém configurando versões com arquivos zipados em backup, como eu já tanto fiz e aidna é feito em muitos lugares.&lt;br /&gt;&lt;br /&gt;O Subversion tem suas &lt;a href="http://www.google.com/search?biw=1272&amp;hl=en&amp;amp;q=subversion+advantages&amp;amp;btnG=Google+Search"&gt;vantagens &lt;/a&gt;sobre o CVS, vou fazer uma tentativa antes de recomendar ou não o sistema. No trabalho eu uso &lt;a href="http://www.perforce.com/"&gt;Perforce&lt;/a&gt;, que é bem legal para linha de comando, mas um pouco complexo apra Java (mudar nome de classes envolve renomear arquivos e um pesadelo anexado a isso).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6820798-111901574112315013?l=pcalcado.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pcalcado.blogspot.com/feeds/111901574112315013/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6820798&amp;postID=111901574112315013&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/111901574112315013'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/111901574112315013'/><link rel='alternate' type='text/html' href='http://pcalcado.blogspot.com/2005/06/subversivo.html' title='Subversivo'/><author><name>Shoes</name><uri>http://www.blogger.com/profile/10271507933128080345</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.guj.com.br/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6820798.post-111790312964073617</id><published>2005-06-04T13:31:00.000-03:00</published><updated>2005-06-04T16:46:51.426-03:00</updated><title type='text'>Comentário: Spring in Action</title><content type='html'>Acabo de ler o livro.&lt;br /&gt;&lt;br /&gt;Bem, apesar dos muitos erros de ortografia (e quem sou eu para reclamar disso?), o livro faz o que se propõe: ensina a configurar o framework. Só não espere &lt;span style="font-weight: bold;"&gt;motivação&lt;/span&gt; para usá-lo, ou um guia de como tal e tal função pdoeria ser útil. Para usar o livro você já deve saber proque quer suar Spring, apenas desejando dominar as configurações.&lt;br /&gt;&lt;br /&gt;Mas a pior característica do livro, na minha opinião, é simplesmente fazer uma substituição de EJB e suas service layers por Spring na maior parte dos exemplos. O livro é uma aula de &lt;a href="http://www.antipatterns.com/"&gt;anti-patterns&lt;/a&gt; de Orientação a Objetos, se você não entende porque, leia &lt;a href="http://www.fragmental.com.br/arquivos/fantoches.pdf"&gt;isso&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Resumindo: vale a compra, mas não espere demais.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Update:&lt;/span&gt; Minha proxima leitura e o &lt;a href="http://www.temporeal.com.br/produtos.php?id=167402"&gt;Object Oriented Design Heuristics&lt;/a&gt; de Arthur Riel. Mais um classico :)&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.temporeal.com.br/imagens/produtos/020163385X.jpg" border="0" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6820798-111790312964073617?l=pcalcado.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pcalcado.blogspot.com/feeds/111790312964073617/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6820798&amp;postID=111790312964073617&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/111790312964073617'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/111790312964073617'/><link rel='alternate' type='text/html' href='http://pcalcado.blogspot.com/2005/06/comentrio-spring-in-action.html' title='Comentário: Spring in Action'/><author><name>Shoes</name><uri>http://www.blogger.com/profile/10271507933128080345</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.guj.com.br/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6820798.post-111773493384205044</id><published>2005-06-02T14:50:00.000-03:00</published><updated>2005-06-02T14:55:33.846-03:00</updated><title type='text'>Resolução de Mês Novo</title><content type='html'>Com a minha incapacidade de digitar um texto num editor e colar no blogger (as vezes por minha culpa, as vezes do blogger), decidi que vou manter os textos longos em PDF e colocar como texto no blog cosias mais breves apenas.&lt;br /&gt;&lt;br /&gt;Com o novo blog saindo quando Zahl quiser, isso deve mudar novamente.&lt;br /&gt;&lt;br /&gt;Ah, obrigado novamente ao renato pela força e os PDFs :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6820798-111773493384205044?l=pcalcado.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pcalcado.blogspot.com/feeds/111773493384205044/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6820798&amp;postID=111773493384205044&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/111773493384205044'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/111773493384205044'/><link rel='alternate' type='text/html' href='http://pcalcado.blogspot.com/2005/06/resoluo-de-ms-novo.html' title='Resolução de Mês Novo'/><author><name>Shoes</name><uri>http://www.blogger.com/profile/10271507933128080345</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.guj.com.br/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6820798.post-111740352423424954</id><published>2005-05-29T18:45:00.000-03:00</published><updated>2005-06-02T12:24:31.516-03:00</updated><title type='text'>Contratos Nulos</title><content type='html'>&lt;p&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;NOTA: mais uma vez a droga do blogger ferrou a formatação. Assim que o primeiro relase do  &lt;a href="https://jrapido.dev.java.net/"&gt;JRapido &lt;/a&gt;sair, eu converto os textos, mas prometo que da próxima vez eu tento fazer direto em HTML. Versão em PDF pelo renato &lt;a href="http://geocities.yahoo.com.br/renato3110/contratos-nulos.pdf"&gt;aqui&lt;/a&gt;.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Um &lt;a href="http://jroller.com/comments/thuss/Blog/tired_of_checking_for_null#comments"&gt;&lt;u&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;post por Todd Huss&lt;/span&gt;&lt;/u&gt;&lt;/a&gt;&lt;span style="font-family:Georgia;"&gt; gerou al&lt;/span&gt;gum burburinho recentemente. Todd reclama de ter que checar argumentos de métodos o tempo todo para ter certeza que não são nulos e ter uma linda &lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;NullPointerException&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Para quem não é de Java ou está começando na linguagem, uma &lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;NullPointerException&lt;/span&gt;, carinhosamente conhecida como NPE, acontece quando você chama um método em uma variável que aponta para null, por exemplo:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;public static void fazerAlgo(String a){&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;a.split(" ");&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;}&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;public static void main(String args[]){&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;fazerAlgo(null);&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Causaria uma NPE (chamando o método &lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;split&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);font-family:Courier New;" &gt; &lt;/span&gt;em &lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;null&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;Existe todo um misticismo com uma NPE, basicamente por um motivo: é um erro de programador. Seu sistema &lt;b&gt;não &lt;/b&gt;devia lançar NPE. O grande problema é que geralmente as pessoas fazem assim:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;public static void fazerAlgo(String a){&lt;br /&gt;if(a==null) throw &lt;b&gt;IssoNaoEhUmaNullPointerExceptionException&lt;/b&gt;("a deve ser definido");&lt;br /&gt;a.split(" ");&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Ou seja: fazem a mesma coisa que uma NPE faz, mas usando &lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;IllegalArgumentException&lt;/span&gt; ou outra exception qualquer.&lt;br /&gt;&lt;br /&gt;Dos comentários que apareceram, uns indicaram o &lt;a href="https://nully.dev.java.net/"&gt;&lt;u&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;projeto nully&lt;/span&gt;&lt;/u&gt;&lt;/a&gt;, no &lt;a href="http://www.java.net/"&gt;&lt;u&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;java.net&lt;/span&gt;&lt;/u&gt;&lt;/a&gt;. O Nully é uma ferramenta para a &lt;a href="http://www.jetbrains.com/"&gt;&lt;u&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;IntelliJ IDEA&lt;/span&gt;&lt;/u&gt;&lt;/a&gt; que basicamente adiciona uma anotação &lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;@NotNull&lt;/span&gt;. que aciona warnings e erros na IDE quando você tenta implementar uma operação que poderia resultar am um valor null para o parâmetro marcado com a tal anotação. Você pode ver mais detalhes no site do projeto, mas eu não gostei mesmo disso.&lt;br /&gt;&lt;br /&gt;Uma outra alternativa dada foi votar no &lt;a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=5030232"&gt;&lt;u&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;BUG 5030232&lt;/span&gt;&lt;/u&gt;&lt;/a&gt;, da Sun, uma tentativa de adicionar o &lt;a href="http://nice.sourceforge.net/safety.html#id2448199"&gt;&lt;u&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;tratamento que a linguagem derivada de Java chamada Nice faz com nulls&lt;/span&gt;&lt;/u&gt;&lt;/a&gt;. Basicamente, Nice exige que você inicie com um "?" as variáveis que podem ser nulas, e não deixa (em tempo de compilação) acessar diretamente operações estas variáveis sem checar se a variável é null antes. Bela tentativa, mas ainda não é isso.&lt;br /&gt;&lt;br /&gt;Adam Kruszewski comentou que &lt;a href="http://blogs.unixage.com/blojsom/blog/adam.kruszewski/java/2005/01/25/Never_accept_null_as_a_parameter_and_never_return_null.txt"&gt;&lt;u&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;no seu blog&lt;/span&gt;&lt;/u&gt;&lt;/a&gt; havia uma implementação com annotations e AspectJ. A implementação dele é bem simples, você anota um método e toda vez que este é chamado seus argumentos são checados, se algum for null ele solta uma exceção. Simples e prático, mas não foi desta vez.&lt;br /&gt;&lt;br /&gt;A solução não sou eu quem vai dar, é um conceito muito antigo que surgiu junto com os primeiros pensamentos em objetos: &lt;b&gt;&lt;i&gt;Design By Contract&lt;/i&gt;&lt;/b&gt;.&lt;/p&gt;Para explicar este conceito, vamos nos focar nos três pilares: invariantes, pré-condições e pós-condições. O conceito de Invariante, entretanto, pede uma breve explicação de Espaço-Estado.&lt;br /&gt;&lt;p&gt;&lt;b&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Espaço-Estado&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;Você sabe que um objeto tem estados, não sabe? Pois bem. Cada componente do estado de um objeto define uma dimensão, pra simplificar, imagine um objeto da classe &lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;Ponto&lt;/span&gt;:&lt;br /&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;class Ponto{&lt;br /&gt;String rotulo=null;&lt;br /&gt;int x;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;int y;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Esse é um ponto cartesiano, com três atributos que definem seu estado.&lt;b&gt; O valor de &lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;x&lt;/span&gt; , e o valor de &lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;y&lt;/span&gt; definem o estado atual do ponto&lt;/b&gt;. &lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;x&lt;/span&gt; e&lt;span style="color: rgb(0, 255, 255);font-family:Courier New;" &gt; &lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;y&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);font-family:Courier New;" &gt; &lt;/span&gt;são as &lt;b&gt;Dimensões &lt;/b&gt;do objeto.&lt;br /&gt;&lt;br /&gt;Como o ponto muda de estado é seu &lt;b&gt;comportamento&lt;/b&gt;. O objeto reage a estímulos, um objeto não muda de estado por si só. Em Java, implementamos o comportamento de objetos nos seus métodos. Vamos supor que nosso ponto só se mova de dez em dez espaços, na horizontal ou vertical, implementando isso:&lt;br /&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;class Ponto{&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;int x;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;int y;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;public void moverX(){&lt;br /&gt;x=x+10;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public void moverY(){&lt;br /&gt;y=y+10;&lt;br /&gt;}&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;}&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Sendo assim, os estados que um ponto pode assumir dependem do seu comportamento. No caso específico, o estado onde a dimensão &lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;x&lt;/span&gt; vale 2 é inválido, já que de zero &lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;x&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt; &lt;/span&gt;só poderia assumir o valor de 10.&lt;br /&gt;&lt;br /&gt;O espaço-estado do objeto seria:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&lt;b&gt;x=0,10,20,30,40,50,60,70,80...&lt;/b&gt;&lt;br /&gt;&lt;b&gt;y=0,10,20,30,40,50,60,70,80...&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Ou seja: &lt;b&gt;&lt;i&gt;espaço-estado é o conjunto de valores de dimensões válidas para um objeto&lt;/i&gt;&lt;/b&gt;. Acho que isso dá uma clara visão do porque atributos públicos são perigosos.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Invariantes&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Existem algumas condições que são necessárias para que um objeto esteja em estado válido. Um triângulo tem sempre três ângulos, um carro em funcionamento tem quatro rodas, um usuário tem lajem e senha definidos...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Essas são invariantes. "Invariantes" porque &lt;b&gt;devem ser obedecidas em todos os momentos do ciclo de vida do objeto&lt;/b&gt;. Invariantes são restrições no espaço-estado do objeto.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Para alguns, é mais fácil pensar em invariantes pensam em como restrições de tabelas em um banco de dados. A tabela A tem uma chave estrangeira A1, que aponta para a chave primária de B e não deve ser nula.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Se, por exemplo, nosso ponto só puder se mover a uma distância máxima de 20 espaços de zero para &lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;x&lt;/span&gt; e 50 para &lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;y&lt;/span&gt;, a invariante seria o intervalo marcado em &lt;b&gt;&lt;span style="color: rgb(128, 128, 0);"&gt;marrom&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(128, 128, 0);"&gt; &lt;/span&gt;abaixo:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;x=&lt;/span&gt;&lt;span style="color: rgb(128, 128, 0);"&gt;0,10,20&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;,30,40,50,60,70,80...&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;y=&lt;/span&gt;&lt;span style="color: rgb(128, 128, 0);"&gt;0,10,20,30,40,50&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;,60,70,80...&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;É dever da implementação do objeto zelar que esteja sempre em estado válido. Sempre que fizer uma transição de estado, o objeto deve checar se está em um estado válido. Em Java, o que poderíamos fazer é:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 255);font-family:Courier New;" &gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;public void moverX(){&lt;br /&gt;&lt;br /&gt;x=x+10;&lt;br /&gt;&lt;br /&gt;checarEstado();&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;public void moverY(){&lt;br /&gt;&lt;br /&gt;y=y+10;&lt;br /&gt;&lt;br /&gt;checarEstado();&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;protected void checarEstado()(){&lt;br /&gt;&lt;br /&gt;if(!(x&amp;lt;20) || !(y&amp;lt;50)) throw new IllegalStateException();&lt;br /&gt;&lt;br /&gt;}&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);font-family:Courier New;" &gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Checar a invariante é apenas sanidade. Sua invariante &lt;b&gt;nunca&lt;/b&gt; deve ser quebrada, e essa é a responsabilidade das pré e pós-condições.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Pré e Pós-Condições&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Aqui está a resposta para o problema das NPE. Toda operação (ou seja: método) define contratos. O contrato de uma operação é:&lt;/p&gt; &lt;dir&gt;&lt;br /&gt;&lt;dir&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Se quem chamar me garantir a &lt;b&gt;pré-condição&lt;/b&gt;, eu garanto a &lt;b&gt;pós-condição&lt;/b&gt;.&lt;/p&gt;&lt;/dir&gt;&lt;br /&gt;&lt;/dir&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Ou seja: se o objeto que chama o método garantir que a pré-condição esteja cumprida, o método deve garantir que a pós-condição também esteja cumprida.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Para exemplificar, vamos criar um método que move nosso ponto um número de espaços qualquer, desde que seja no máximo 20 espaços por vez :&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 255);font-family:Courier New;" &gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;public void mover(int espacosX, int espacosY){&lt;br /&gt;&lt;br /&gt;x=+espacosX;&lt;br /&gt;&lt;br /&gt;y=+espacosy;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;checarEstado();&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Para evitar que a invariante seja quebrada e nós tenhamos certeza que o parâmetro é até vinte espaços, vamos estabelecer uma pré-condição através da checagem de parâmetros enviados e uma pós-condição:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;&lt;br /&gt;&lt;br /&gt;public void mover(int espacosX, int espacosY){&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;//checando pre condição&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;if (!(espacosX &amp;gt; 15)) throw new IllegalArgumentException();&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;if( !((x+espacosX) &amp;lt; 20)) throw new IllegalArgumentException();&lt;br /&gt;&lt;br /&gt;if( !((y+espacosy) &amp;lt; 50)) throw new IllegalArgumentException();&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;int antigoX = x;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;int antigoY = y;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;x=+espacosX;&lt;br /&gt;&lt;br /&gt;y=+espacosy;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;//checando pos condições&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;if(x!=(antigoX+espacoX)){&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;p&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;&lt;b&gt; x=antigoX;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;&lt;b&gt;&lt;br /&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;p&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;&lt;b&gt;throw new IllegalStateException();&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;p&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;&lt;b&gt;}&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;if(y!=(antigoY+espacoY)) {  &lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;p&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;&lt;b&gt;y=antigoY;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;p&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;&lt;b&gt;throw new IllegalStateException();&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;p&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;&lt;b&gt;}&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/b&gt;checarEstado();&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);font-family:Courier New;" &gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial;"&gt;Acho que agora fica claro como resolver o problema das NPEs. O ponto é que você não deve checar contra &lt;b&gt;valores nulos&lt;/b&gt;, mas sim contra &lt;b&gt;valores inválidos&lt;/b&gt;&lt;/span&gt;&lt;span style="font-family:Georgia;"&gt;. Você não deve evitar&lt;/span&gt;&lt;span style="font-family:Arial;"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;NullPointerException&lt;/span&gt;&lt;span style="font-family:Arial;"&gt;s, deve evitar que seus métodos processem argumentos inválidos.&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);font-family:Courier New;" &gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Georgia;"&gt;A princípio, a pós-condição pode parecer inútil, mas lembre-se: você prometeu que ia entregar isso, não custa nada dar uma segunda conferida. Ok, em um caso simples como esse, é superficial.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Isso me lembra de uma ocasião onde tinha que gerar uma página HTML com no máximo 180 caracteres. O métodos que gerava o texto da página tinha no seu contrato a garantia que geraria no máximo 180 caracteres, e como era um processo muito complexo, sempre que terminava ele mesmo checava o texto gerado. &lt;b&gt;Quando você não tem absoluta certeza que vai conseguir cumprir seu contrato (ou se seu método depender de outros métodos que podem não obedecer contrato nenhum), cheque antes de retornar.&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);font-family:Georgia;" &gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(128, 0, 0);font-family:Georgia;" &gt;Subclasses e Contratos&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family:Georgia;"&gt;Como uma subclasse estabelece seu contrato?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Quanto á Invariante, a subclasse pode definir que sua definição de "válida" é diferente da classe mãe, por isso ela pode definir uma invariante diferente. Vamos exemplificar cirando uma classe-filha para nosso ponto:&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;&lt;br /&gt;&lt;br /&gt;class PontoLonge extends Ponto{&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;protected void checarEstado()(){&lt;br /&gt;&lt;br /&gt;&lt;b&gt;if( !(x &amp;lt; 1000) || !(y &amp;lt; 1000)) throw new IllegalStateException();&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;}&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);font-family:Courier New;" &gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Georgia;"&gt;&lt;br /&gt;&lt;br /&gt;Nesse caso, a nova classe definiu que sua invariante permite valores maiores para &lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Georgia;" &gt;x&lt;/span&gt;&lt;span style="font-family:Georgia;"&gt; e &lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Georgia;" &gt;y&lt;/span&gt;&lt;span style="font-family:Georgia;"&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Como nosso ponto pode se mover para lugares muito mais longínquos é trabalhoso ficar indo de pouco em pouco. Vamos redefinir os métodos de movimento para nos movermos mais rapidamente:&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;&lt;br /&gt;&lt;br /&gt;class PontoLonge extends Ponto{&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;protected void checarEstado()(){&lt;br /&gt;&lt;br /&gt;if( !(x &amp;lt; 1000) || !(y &amp;lt; 1000)) throw new IllegalStateException();&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;public void mover(int espacosX, int espacosY){&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//checando pre condição&lt;br /&gt;&lt;br /&gt;&lt;b&gt;if (!(espacosX &amp;gt; 100) || !(espacosY &amp;gt; 100) ) throw new IllegalArgumentException();&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;if( !((x+espacosX) &amp;lt; 1000)) throw new IllegalArgumentException();&lt;br /&gt;&lt;br /&gt;if( !((y+espacosY) &amp;lt; 1000)) throw new IllegalArgumentException();&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;int antigoX = x;&lt;br /&gt;&lt;br /&gt;int antigoY = y;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;x=+espacosX;&lt;br /&gt;&lt;br /&gt;y=+espacosy;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//checando pos condições&lt;br /&gt;&lt;br /&gt;if(x!=(antigoX+espacoX)){&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt; x=antigoX;&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;throw new IllegalStateException();&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;}&lt;br /&gt;&lt;br /&gt;if(y!=(antigoY+espacoY)) {  &lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;y=antigoY;&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;throw new IllegalStateException();&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;checarEstado();&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);font-family:Courier New;" &gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Georgia;"&gt;Parece legal? Primeiro, uma sugestão é refatorar os métodos, olhe só essa quantidade de coisas repetidas! Esse exercício fica para você já que foge ao escopo do post.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Voltando à sobrescrita, você consegue imaginar um problema? Se não, veja o código abaixo, retirado de uma classe que usa os objetos ponto:&lt;b&gt;&lt;br /&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;&lt;br /&gt;&lt;br /&gt;public moverUmPoucoUmPonto(Ponto p){&lt;br /&gt;&lt;br /&gt;p.mover(11,21);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family:Georgia;"&gt;Que tal? Essa classe funciona com &lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Georgia;" &gt;Ponto&lt;/span&gt;&lt;span style="font-family:Georgia;"&gt;, mas não com&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;PontoLonge&lt;/span&gt;&lt;span style="font-family:Georgia;"&gt;. Parabéns para nós, acabamos de mandar todo o polimorfismo para o espaço, já que não podemos utilizar nossa classe derivada como usamos a classe mãe. Solução?&lt;b&gt;&lt;br /&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-family:Courier New;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;dir&gt;&lt;b&gt;&lt;span style="font-family:Courier New;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;dir&gt;&lt;b&gt;&lt;span style="font-family:Courier New;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family:Georgia;"&gt;&lt;/span&gt;&lt;p&gt;&lt;span style="font-family:Georgia;"&gt;A pré-condição de um método sobrescrito em uma classe deve ser&lt;b&gt; igual ou menos restritiva&lt;/b&gt; que a pré-condição do método na classe mãe.&lt;/span&gt;&lt;/p&gt;&lt;/dir&gt;&lt;span style="font-family:Georgia;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/dir&gt;&lt;span style="font-family:Georgia;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;span style="font-family:Georgia;"&gt;&lt;br /&gt;&lt;br /&gt;Isso significa que nós poderíamos aceitar cosias que a superclasse não aceita, mas nós temos que aceitar tudo que a superclasse aceitaria. No código, nós poderíamos, poderíamos, por exemplo, dizer que o mínimo de espaços que podemos mover passa de 15 para 5, porque assim o código feito para a superclasse ainda funcionaria. Corrigindo o exemplo (ainda sem refatoração):&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;public void mover(int espacosX, int espacosY){&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//checando pre condição&lt;br /&gt;&lt;br /&gt;&lt;b&gt;if (!(espacosX &amp;gt; 15)) throw new IllegalArgumentException();&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;if( !((x+espacosX) &amp;lt; 1000))throw new IllegalArgumentException();&lt;br /&gt;&lt;br /&gt;if( !((y+espacosY) &amp;lt; 1000))throw new IllegalArgumentException();&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;int antigoX = x;&lt;br /&gt;&lt;br /&gt;int antigoY = y;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;x=+espacosX;&lt;br /&gt;&lt;br /&gt;y=+espacosy;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//checando pos condições&lt;br /&gt;&lt;br /&gt;if(x!=(antigoX+espacoX)){&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt; x=antigoX;&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;throw new IllegalStateException();&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;}&lt;br /&gt;&lt;br /&gt;if(y!=(antigoY+espacoY)) {  &lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;y=antigoY;&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;throw new IllegalStateException();&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;}&lt;br /&gt;&lt;br /&gt;checarEstado();&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;}&lt;b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-family:Georgia;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family:Georgia;"&gt;Não tem jeito de aumentar o valor mínimo, então voltamos ao original (e mais código repetido, anda logo com esse refactoring aí!).&lt;/span&gt;&lt;/p&gt;&lt;span style="font-family:Georgia;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;span style="font-family:Georgia;"&gt;Isso também te explica porque você pode, em java, aumentar a visibilidade de um método (tornar um método que era &lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;protected public&lt;/span&gt;&lt;span style="font-family:Georgia;"&gt;), mas não diminuir (tornar um método &lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;public private&lt;/span&gt;&lt;span style="font-family:Georgia;"&gt;).&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Georgia;"&gt;Para pós-condições, é bem parecido:&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;dir&gt;&lt;span style="font-family:Courier New;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;dir&gt;&lt;span style="font-family:Courier New;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Georgia;"&gt;&lt;p&gt;Uma pós-condição de um método sobrescrito deve ser &lt;b&gt;igual ou mais restritiva&lt;/b&gt; que a pós-condição do método original.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;/span&gt;&lt;/dir&gt;&lt;span style="font-family:Courier New;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/dir&gt;&lt;span style="font-family:Courier New;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Georgia;"&gt;&lt;/span&gt;&lt;p&gt;&lt;span style="font-family:Georgia;"&gt;Isso quer dizer que se a pós-condição do seu método for que ele retorna um inteiro entre 1 e 100, os métodos que sobrescreverem este podem gerar um número entre 50 e 60, mas &lt;b&gt;não&lt;/b&gt; um entre 1 e 500, por exemplo. Se uma classe estava esperando receber deste método entre 1 e 100 e recebe 50, não há problema, mas se ela receber 500, aí sim o polimorfismo deixa de funcionar como deveria (e pode ser que algo simplesmente exploda no seu sistema!).&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(128, 0, 0);font-family:Georgia;" &gt;Contratos Quebrados&lt;/span&gt;&lt;span style="font-family:Arial;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family:Georgia;"&gt;Como qualquer contrato, o contrato de uma classe pode ser quebrado. Você já deve ter uma idéia de como reagir quando o cliente não cumpre sua parte, lançando uma exceção, mas lembre-se também que &lt;b&gt;você&lt;/b&gt; pode não cumprir o contrato. è aí que entra a pós-condição, se ela não foi obedecida quem não cumpriu o contrato foi você.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Quase sempre é melhor você interromper o processamento com uma exceção do que retornar um valor que não cumpre a pós-condição.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Você poderia ter outro comportamento nesse caso, como retornar uma flag, ou mesmo não fazendo nada, mas exceções são a maneira padronizada de lidar com quebra de contratos. Com a pré-condição documentada, é obrigação do cliente provê-la, a checagem é só para evitar esforço desnecessário e identificar erros mais rapidamente.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(128, 0, 0);font-family:Georgia;" &gt;Documentando&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);font-family:Courier New;" &gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family:Georgia;"&gt;Um contrato só tem sentido se documentado. Muitas plataformas oferecem facilidades para documentar o contrato das classes, infelizmente Java não tem nada assim pronto.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;O que você pode fazer é usar o bom e velho &lt;/span&gt;&lt;a href="http://java.sun.com/j2se/javadoc/"&gt;&lt;u&gt;&lt;span style="color: rgb(0, 0, 255);font-family:Georgia;" &gt;JavaDoc&lt;/span&gt;&lt;/u&gt;&lt;/a&gt;&lt;span style="font-family:Georgia;"&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Documente a invariante da classe na descrição desta. Você pode usar um pseudocódigo (evite copiar e colar o código, porque assim você expõe sua implementação).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;O contrato dos métodos deve estar descrito na documentação destes, use as tags de &lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;@param&lt;/span&gt;&lt;span style="font-family:Georgia;"&gt;, &lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;@throws&lt;/span&gt;&lt;span style="font-family:Georgia;"&gt; e &lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;@return&lt;/span&gt;&lt;span style="font-family:Georgia;"&gt; para indicar o que você espera e o que provê.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Coloque na cabeça que checar contratos é documentação. qualquer um sabe como usar corretamente seu método se você especificar seu contrato na documentação.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);font-family:Courier New;" &gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(128, 0, 0);font-family:Georgia;" &gt;Isso é Trabalhoso Demais!&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family:Georgia;"&gt;Sim, eu sei. Infelizmente, Java não tem suporte nativo á design by contract, ao contrário de algumas outras linguagens (geralmente linguagens puramente OO). Sim, existe o &lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;assert&lt;/span&gt;&lt;span style="font-family:Georgia;"&gt; herdado do C, e existem abordagens em AOP e Proxies (uma até sugerida no post mencionado), mas a linguagem por si só não tem esse recurso.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Uma linguagem com suporte à contratos vai te dar um modo fácil de definir e se referenciar a pré e pós-condições, invariantes e guardar valores antigos (o nosso &lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;antigoX&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);font-family:Courier New;" &gt; &lt;/span&gt;&lt;span style="font-family:Georgia;"&gt;e &lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;antigoY&lt;/span&gt;&lt;span style="font-family:Georgia;"&gt;). Vai fazer um  &lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;or&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);font-family:Courier New;" &gt; &lt;/span&gt;&lt;span style="font-family:Georgia;"&gt;automático com uma pré-condição e a pré-condição  do método que você sobrescrever, e um &lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);font-family:Courier New;" &gt;and&lt;/span&gt;&lt;span style="font-family:Georgia;"&gt; com a pós-condição. Ainda deveria gerar um documento como um JavaDoc com espaço reservado para a pré e pós-condições (que, afinal, são públicas). Também deve ter um mecanismos eu permita ligar ou desligar as checagens, se quisermos mantê-las só para depuração.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Enquanto não vemos isso em java, nós temos que criar esses conceitos por nós mesmos. Isso geralmente implica num overhead enorme. de uma maneira geral:&lt;/span&gt;&lt;/p&gt;&lt;span style="font-family:Georgia;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;span style="font-family:Georgia;"&gt;&lt;br /&gt;&lt;li&gt;Se uma classe possui estados inválidos e estes estados são atingíveis, providencie uma invariante e faça a checagem dela.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Se seus métodos realizam um processamento e retorne um valor, cheque este valor se no meio do caminho você precisou usar métodos não-confiáveis, como métodos de terceiros&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Sempre estabeleça e documente um contrato, mesmo que você não faça checagem.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Se uma classe precisa de muitos objetos para não estar fora da invariante e você não quer passar estes objetos no construtor, use uma &lt;/li&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;Factory&lt;/span&gt;&lt;span style="font-family:Georgia;"&gt;.&lt;br /&gt;&lt;li&gt;Tente utilizar o máximo possível de boas-práticas estabelecendo checagens, evite código duplicado ao máximo.&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Tenha testes unitários que testem todas as possibilidades que você consiga pensar de quebrar o contrato dos métodos.&lt;/li&gt;&lt;/span&gt;&lt;/ul&gt;&lt;span style="font-family:Georgia;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6820798-111740352423424954?l=pcalcado.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pcalcado.blogspot.com/feeds/111740352423424954/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6820798&amp;postID=111740352423424954&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/111740352423424954'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/111740352423424954'/><link rel='alternate' type='text/html' href='http://pcalcado.blogspot.com/2005/05/contratos-nulos.html' title='Contratos Nulos'/><author><name>Shoes</name><uri>http://www.blogger.com/profile/10271507933128080345</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.guj.com.br/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6820798.post-111564919938509038</id><published>2005-05-09T11:32:00.000-03:00</published><updated>2005-06-01T13:38:05.766-03:00</updated><title type='text'>Fantoches</title><content type='html'>&lt;p class="MsoNormal" style="margin-bottom: 12pt;"&gt;&lt;span style="font-weight: bold; font-style: italic; color: rgb(153, 0, 0);"&gt;Nota:&lt;/span&gt;&lt;span style="font-style: italic; color: rgb(153, 0, 0);"&gt; Devido a utilizar um editor de textos, depois colar no blogger, a formatação ficou uma porcaria. O &lt;a href="http://www.guj.com.br/user/profile/4889.java"&gt;Renato &lt;/a&gt;fez uma &lt;a href="http://geocities.yahoo.com.br/renato3110/fantoches.pdf"&gt;versão em PDF&lt;/a&gt; (valeu, cara :) ).&lt;/span&gt;&lt;br /&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin-bottom: 12pt;"&gt;A modelagem baseada em objetos é vendida como o meio ideal de se desenvolver um sistema nos dias de hoje. Pelas tecnologias e paradigmas que eu conheço, eu acredito nisso também, mas sem &lt;i&gt;hype&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;Eu gosto de Análise e projeto Estruturados. Primeiro porque me fizeram pensar em programas como mais que bits e bytes correndo por uma tela monocromática, me fizeram entender sistemas.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;Mas Estruturar Não era Legal?&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;Antes de continuar, deixa-me fazer uma definição que vai servir para o resto desse blog.&lt;br /&gt;&lt;!--[if !supportLineBreakNewLine]--&gt;&lt;br /&gt;&lt;!--[endif]--&gt;&lt;/p&gt;    &lt;p class="MsoNormal" style="margin-right: 36pt; margin-left: 36pt;"&gt;&lt;/p&gt;&lt;blockquote&gt;O &lt;b&gt;&lt;i&gt;Paradigma Procedural&lt;/i&gt;&lt;/b&gt; é como eu chamo a programação onde dados e funções estão separadas. Nesse modelo de desenvolvimento de software as entidades são representadas por estruturas de dados simples que são manipuladas por funções independentes.&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;   &lt;p class="MsoNormal"&gt;Eu não gosto do termo &lt;b&gt;&lt;i&gt;Programação Estruturada&lt;/i&gt;&lt;/b&gt; (apesar de&lt;br /&gt;usá-lo ocasionalmente). Este termo surgiu para separar a arte de destruir a&lt;br /&gt;seqüência lógica de um sistema com instruções &lt;span style=""&gt;GOTO&lt;/span&gt; (&lt;a href="http://www.acm.org/classics/oct95/"&gt;veja o que Dijkstra diz&lt;/a&gt; sobre&lt;br /&gt;isso tudo no seu &lt;em&gt;paper&lt;/em&gt; clássico), comum em BASIC, da separação do fluxo&lt;br /&gt;em sub-rotinas, as &lt;em&gt;&lt;b&gt;funções&lt;/b&gt;&lt;/em&gt; e &lt;em&gt;&lt;b&gt;procedimentos&lt;/b&gt;&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;Então, &lt;strong&gt;programação orientada a objetos é programação estruturada &lt;/strong&gt;no sentido que separa as funcionalidades em módulos. Chamaremos neste blog de &lt;strong&gt;&lt;i&gt;Programação Procedural &lt;/i&gt;&lt;/strong&gt;o modo de definir um programa como descrito acima.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;Modelando o Mundo&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;   &lt;p class="MsoNormal"&gt;A primeira coisa que se aprende num curso básico de Análise de Sistemas (seja qual paradigma/metodologia seja usada) é que um sistema de informação modela um mini-mundo. Este mundo é uma versão abstraída do mundo normal, onde os únicos detalhes que importam são os relacionados com a aplicação, com o que o sistema faz.&lt;br /&gt;&lt;br /&gt;Num sistema estruturado, geralmente se pensa em como as coisas acontecem, no fluxo de informação. Pensando procedural, um simples cadastro é assim:&lt;/p&gt;   &lt;p class="MsoNormal" style="margin-right: 36pt; margin-left: 36pt;"&gt;Cliente fornece endereço, endereço é armazenado.&lt;/p&gt;   &lt;p class="MsoNormal" style="margin-bottom: 12pt;"&gt;Dados fluindo. Acho que todos percebem que a função, o &lt;em&gt;Processo &lt;/em&gt;na nomenclatura de Análise Estruturada (aquelas bolhas do Yourdon) vai receber uma estrutura de dados &lt;span style=""&gt;ENDEREÇO&lt;/span&gt; e colocar no repositório (que pode ser um SGBD ou um arquivo ou qualquer outra coisa).&lt;br /&gt;&lt;br /&gt;Pensando de uma maneira OO, você tem: &lt;/p&gt;   &lt;p class="MsoNormal" style="margin-right: 36pt; margin-left: 36pt;"&gt;Cliente tem um endereço.&lt;/p&gt;   &lt;p class="MsoNormal"&gt;Uhm? Sim. No seu mini-mundo OO, você vai mapear o que te importa (o cliente e seu endereço) para um objeto. É claro que dependendo da sua aplicação o Cliente pode ser jogado fora, mas aí vai te restar o objeto &lt;span style=""&gt;Endereço&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Num modelo OO, você está preocupado com o que existe no seu mundo real, como as coisas se relacionam por elas mesmas.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;Implementações Procedurais&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;Vamos pensar um cenário simples. Um estacionamento.&lt;br /&gt;&lt;br /&gt;Nosso sisteminha exemplo tem uma só funcionalidade: descobrir se existe vaga disponível para um carro no estacionamento e colocar esse carro na vaga.&lt;br /&gt;&lt;br /&gt;Vamos ver o modo procedural de fazer as coisas. Vou usar Java para os dois casos como é minha linguagem atual, mas como muita gente programa 100% procedural em Java, não devemos ter muitos problemas.&lt;br /&gt;&lt;!--[if !supportLineBreakNewLine]--&gt;&lt;br /&gt;&lt;!--[endif]--&gt;&lt;/p&gt;   &lt;table style="border: medium none ; border-collapse: collapse;" border="1" cellpadding="0" cellspacing="0"&gt;   &lt;tbody&gt;&lt;tr&gt;   &lt;td style="border: 0.5pt solid windowtext; padding: 0cm 3.5pt; width: 448.9pt;" valign="top" width="599"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 102, 102);font-family:courier new;" class="MsoNormal"&gt;&lt;span lang="EN-US"  style="font-size:85%;"&gt;class Carro {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 102, 102);font-family:courier new;" class="MsoNormal"&gt;&lt;span lang="EN-US"  style="font-size:85%;"&gt;&lt;span style=""&gt;     &lt;/span&gt;private   String placa;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 102, 102);font-family:courier new;" class="MsoNormal"&gt;&lt;span lang="EN-US"  style="font-size:85%;"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 102, 102);font-family:courier new;" class="MsoNormal"&gt;&lt;span lang="EN-US"  style="font-size:85%;"&gt;&lt;span style=""&gt;     &lt;/span&gt;private   Date dataEntrada;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 102, 102);font-family:courier new;" class="MsoNormal"&gt;&lt;span lang="EN-US"  style="font-size:85%;"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 102, 102);font-family:courier new;" class="MsoNormal"&gt;&lt;span lang="EN-US"  style="font-size:85%;"&gt;&lt;span style=""&gt;     &lt;/span&gt;private   int vaga = -1;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 102, 102);font-family:courier new;" class="MsoNormal"&gt;&lt;span lang="EN-US"  style="font-size:85%;"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 102, 102);font-family:courier new;" class="MsoNormal"&gt;&lt;span lang="EN-US"  style="font-size:85%;"&gt;&lt;span style=""&gt;     &lt;/span&gt;public   void setPlaca(String p) {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 102, 102);font-family:courier new;" class="MsoNormal"&gt;&lt;span lang="EN-US"  style="font-size:85%;"&gt;&lt;span style=""&gt;         &lt;/span&gt;this.placa   = p;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 102, 102);font-family:courier new;" class="MsoNormal"&gt;&lt;span lang="EN-US"  style="font-size:85%;"&gt;&lt;span style=""&gt;     &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 102, 102);font-family:courier new;" class="MsoNormal"&gt;&lt;span lang="EN-US"  style="font-size:85%;"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 102, 102);font-family:courier new;" class="MsoNormal"&gt;&lt;span lang="EN-US"  style="font-size:85%;"&gt;&lt;span style=""&gt;     &lt;/span&gt;public   String getPlaca() {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 102, 102);font-family:courier new;" class="MsoNormal"&gt;&lt;span lang="EN-US"  style="font-size:85%;"&gt;&lt;span style=""&gt;         &lt;/span&gt;return   placa;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 102, 102);font-family:courier new;" class="MsoNormal"&gt;&lt;span lang="EN-US"  style="font-size:85%;"&gt;&lt;span style=""&gt;     &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 102, 102);font-family:courier new;" class="MsoNormal"&gt;&lt;span lang="EN-US"  style="font-size:85%;"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 102, 102);font-family:courier new;" class="MsoNormal"&gt;&lt;span lang="EN-US"  style="font-size:85%;"&gt;&lt;span style=""&gt;     &lt;/span&gt;public   void setDataEntrada(Date data) {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 102, 102);font-family:courier new;" class="MsoNormal"&gt;&lt;span lang="EN-US"  style="font-size:85%;"&gt;&lt;span style=""&gt;         &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;this.dataEntrada = data;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 102, 102);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;     &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US"  style="font-size:85%;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 102, 102);font-family:courier new;" class="MsoNormal"&gt;&lt;span lang="EN-US"  style="font-size:85%;"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 102, 102);font-family:courier new;" class="MsoNormal"&gt;&lt;span lang="EN-US"  style="font-size:85%;"&gt;&lt;span style=""&gt;     &lt;/span&gt;public   Date getDataEntrada() {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 102, 102);font-family:courier new;" class="MsoNormal"&gt;&lt;span lang="EN-US"  style="font-size:85%;"&gt;&lt;span style=""&gt;         &lt;/span&gt;return   dataEntrada;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 102, 102);font-family:courier new;" class="MsoNormal"&gt;&lt;span lang="EN-US"  style="font-size:85%;"&gt;&lt;span style=""&gt;     &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 102, 102);font-family:courier new;" class="MsoNormal"&gt;&lt;span lang="EN-US"  style="font-size:85%;"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 102, 102);font-family:courier new;" class="MsoNormal"&gt;&lt;span lang="EN-US"  style="font-size:85%;"&gt;&lt;span style=""&gt;     &lt;/span&gt;public   void setVaga(int vaga) {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 102, 102);font-family:courier new;" class="MsoNormal"&gt;&lt;span lang="EN-US"  style="font-size:85%;"&gt;&lt;span style=""&gt;         &lt;/span&gt;this.vaga   = vaga;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 102, 102);font-family:courier new;" class="MsoNormal"&gt;&lt;span lang="EN-US"  style="font-size:85%;"&gt;&lt;span style=""&gt;     &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 102, 102);font-family:courier new;" class="MsoNormal"&gt;&lt;span lang="EN-US"  style="font-size:85%;"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 102, 102);font-family:courier new;" class="MsoNormal"&gt;&lt;span lang="EN-US"  style="font-size:85%;"&gt;&lt;span style=""&gt;     &lt;/span&gt;public   int getVaga() {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 102, 102);font-family:courier new;" class="MsoNormal"&gt;&lt;span lang="EN-US"  style="font-size:85%;"&gt;&lt;span style=""&gt;         &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;return vaga;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 102, 102);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;     &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 102, 102);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 102, 102);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 102, 102);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;class   Estacionamento {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 102, 102);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 102, 102);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;     &lt;/span&gt;public final double VALOR_HORA = 0.5;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 102, 102);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 102, 102);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;     &lt;/span&gt;private Carro[] vagas = new Carro[5];&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 102, 102);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 102, 102);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;     &lt;/span&gt;public boolean estacionar(Carro c) {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 102, 102);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;         &lt;/span&gt;int vagaLivre = vagaLivre();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 102, 102);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 102, 102);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;     &lt;/span&gt;&lt;span style=""&gt;     &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US"  style="font-size:85%;"&gt;if (vagaLivre == -1)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 102, 102);font-family:courier new;" class="MsoNormal"&gt;&lt;span lang="EN-US"  style="font-size:85%;"&gt;&lt;span style=""&gt;              &lt;/span&gt;return   false;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 102, 102);font-family:courier new;" class="MsoNormal"&gt;&lt;span lang="EN-US"  style="font-size:85%;"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 102, 102);font-family:courier new;" class="MsoNormal"&gt;&lt;span lang="EN-US"  style="font-size:85%;"&gt;&lt;span style=""&gt;         &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;c.setDataEntrada(new Date());   //coloca a data atual do sistema&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 102, 102);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;         &lt;/span&gt;vagas[vagaLivre] = c;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 102, 102);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;         &lt;/span&gt;c.setVaga(vagaLivre);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 102, 102);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;         &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US"  style="font-size:85%;"&gt;return   true;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 102, 102);font-family:courier new;" class="MsoNormal"&gt;&lt;span lang="EN-US"  style="font-size:85%;"&gt;&lt;span style=""&gt;     &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 102, 102);font-family:courier new;" class="MsoNormal"&gt;&lt;span lang="EN-US"  style="font-size:85%;"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 102, 102);font-family:courier new;" class="MsoNormal"&gt;&lt;span lang="EN-US"  style="font-size:85%;"&gt;&lt;span style=""&gt;     &lt;/span&gt;public   double sair(Carro c) {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 102, 102);font-family:courier new;" class="MsoNormal"&gt;&lt;span lang="EN-US"  style="font-size:85%;"&gt;&lt;span style=""&gt;         &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;int vagaOcupada =   c.getVaga();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 102, 102);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;         &lt;/span&gt;Date dataEntrada =   c.getDataEntrada();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 102, 102);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;         &lt;/span&gt;double conta =   tempoEmHorasAteHoje(dataEntrada) * VALOR_HORA;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 102, 102);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;         &lt;/span&gt;c.setVaga(-1);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 102, 102);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;         &lt;/span&gt;vagas[vagaOcupada] = null;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 102, 102);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;         &lt;/span&gt;c.setDataEntrada(null);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 102, 102);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;         &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US"  style="font-size:85%;"&gt;return   conta;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 102, 102);font-family:courier new;" class="MsoNormal"&gt;&lt;span lang="EN-US"  style="font-size:85%;"&gt;&lt;span style=""&gt;     &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p style="color: rgb(51, 102, 102);" class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 153, 0);font-family:courier new;" &gt;}&lt;/span&gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p style="color: rgb(51, 102, 102);" class="MsoNormal"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt;   &lt;p style="color: rgb(51, 102, 102);" class="MsoNormal"&gt;&lt;span style=""&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal"&gt;Aposto que muita gente vai estranhar eu rotular isso de procedural. Aqui nós temos a classe &lt;span style=""&gt;Estacionamento&lt;/span&gt; que cuida do processo de estacionar e deixar o estacionamento do &lt;span style=""&gt;Carro&lt;/span&gt;, representado por um &lt;em&gt;pseudo-JavaBean&lt;/em&gt; (um dia eu explico que é um pseudo-JavaBean para mim).&lt;br /&gt;&lt;br /&gt;Mas, o que tem isso de procedural? São classes, não são?&lt;br /&gt;&lt;br /&gt;Meu primeiro exercício é para quem tem background em linguagens procedurais. Tente reescrever isso utilizando pascal clássico (não Delphi), FORTRAN ou C (não C++). O código não vai ficar muito diferente, não é? Para quem não programa nessas linguagens, vai mostrar uma implementaçãozinha mixuruca em pseudocodigo baseado em C:&lt;br /&gt;&lt;!--[if !supportLineBreakNewLine]--&gt;&lt;br /&gt;&lt;!--[endif]--&gt;&lt;/p&gt;   &lt;table style="border: medium none ; border-collapse: collapse;" border="1" cellpadding="0" cellspacing="0"&gt;   &lt;tbody&gt;&lt;tr&gt;   &lt;td style="border: 0.5pt solid windowtext; padding: 0cm 3.5pt; width: 448.9pt;" valign="top" width="599"&gt;   &lt;p class="MsoNormal"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style="color: rgb(51, 153, 153);font-family:courier new;font-size:85%;"  &gt;struct   t_carro&lt;br /&gt;{&lt;br /&gt;char * placa ; /* uma string */&lt;br /&gt;int vaga ;&lt;br /&gt;time_t data_entrada ; /* um dos tipos de data */&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;typedef struct t_carro carro ; /*para podermos usar a struct */&lt;br /&gt;&lt;br /&gt;carro vazio;&lt;br /&gt;&lt;br /&gt;carro vagas[5];&lt;br /&gt;&lt;br /&gt;int estacionar(carro c){&lt;br /&gt;int vaga_livre = achar_vaga_livre();&lt;br /&gt;&lt;br /&gt;if(vaga_livre==-1) return 0; /* em C, 0 = false e 1 = true */&lt;br /&gt;&lt;br /&gt;c.data_entrada = data_do_sistema();&lt;br /&gt;&lt;br /&gt;vagas[vaga_livre] = c;&lt;br /&gt;c.vaga = vaga_livre;&lt;br /&gt;return 1;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;double sair(carro c){&lt;br /&gt;&lt;br /&gt;int vaga_ocupada = c.vaga;&lt;br /&gt;time_t data_entrada = c.data_entrada;&lt;br /&gt;double conta = tempo_em_horas_ate_hoje(data_entrada) * VALOR_HORA;&lt;br /&gt;&lt;br /&gt;c.vaga=-1;&lt;br /&gt;vagas[vaga_ocupada]=vazio;&lt;br /&gt;c.data_entrada=0;&lt;br /&gt;return conta;&lt;br /&gt;}&lt;/span&gt;&lt;span style="color: rgb(51, 153, 153);"&gt;         &lt;/span&gt;&lt;br /&gt;&lt;!--[if !supportLineBreakNewLine]--&gt;&lt;br /&gt;&lt;!--[endif]--&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt;   &lt;p class="MsoNormal"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;p class="MsoNormal"&gt;Mesmo que você não saiba nada de C, dá pra perceber que os códigos são muito parecidos. A maior diferença e fútil, está nas convenções de nomenclatura. Se você colocar os atributos de &lt;span style=""&gt;Carro&lt;/span&gt;&lt;span style=""&gt; &lt;/span&gt;na primeira implementação como públicos, além de não perder nada (afinal, o que são &lt;span style=""&gt;get&lt;/span&gt; e &lt;span style=""&gt;set&lt;/span&gt; além de jeitos mais lentos de fazer um atributo público?) o código vai ficar mais parecido.&lt;br /&gt;&lt;br /&gt;Claro que a sintaxe das linguagens é muito parecida, e isso ajuda, mas o que parece não é a sintaxe, é o meio como se programa. Esse é um programa altamente procedural.&lt;br /&gt;&lt;br /&gt;Note que não existe um só meio procedural de pensar e implementar ou um só meio OO de fazer isso, uns são melhores outros piores, mas estes são apenas dois exemplos.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;Bad Smell: Forças Ocultas&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;O clássico livro &lt;a href="http://www.refactoring.com/"&gt;Refactoring&lt;/a&gt;, de &lt;a href="http://www.martinfowler.com/"&gt;Martin Fowler &lt;/a&gt; introduz o conceito de &lt;em&gt;bad smells&lt;/em&gt;, literalmente um fedor no código. Você olha, cheira, vê que tem algo errado, e tem que descobrir a causa.&lt;br /&gt;&lt;br /&gt;Note que o sistema &lt;em&gt;&lt;b&gt;funciona&lt;/b&gt;&lt;/em&gt;! Você pode entregar para o seu cliente exatamente desta maneira, mas o que nos queremos aqui não é entregar algo rápido para gerar uma fatura, estamos estudando a melhor maneira de implementar, e como objetos podem ajudar a tornar o desenvolvimento de software mais natural.&lt;br /&gt;&lt;br /&gt;Falando em natural, pense no código que criamos, em qualquer uma das implementações. Esse modelo se parece com o mundo real? Vejamos: temos um procedimento que recebe um carro, o joga no estacionamento... como se na entrada do estacionamento houvesse um guindaste que carregasse os carros até suas vagas. É assim que funciona? Não! O motorista ou o manobrista vai pegar o carro e dirigi-lo ate a vaga certa. O carro "sabe" estacionar, e essa é uma responsabilidade dele: &lt;i&gt;dada uma vaga, estacione&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;Claro que você pode efetivamente ter seu carro sendo movido desta forma (&lt;em&gt;é só um sistema, não é o mundo real!&lt;/em&gt;), mas eu insisto: modele seu sistema o mais próximo que conseguir do mundo real. Qualquer dia falamos sobre &lt;em&gt;Domain Driven Design&lt;/em&gt;, mas por enquanto, isso te ajuda a conversar mais facilmente com seus usuários e manter a mesma linguagem que ele, podendo aproveitar os conceitos que ele aplica no dia a dia.&lt;br /&gt;&lt;br /&gt;No caso específico, nosso método &lt;span style=""&gt;estacionar(Carro c)&lt;/span&gt; está com responsabilidades demais! Ele tem que coordenar o processo de encontrar uma vaga, modificar o carro, modificar a vaga... e olhe que isso é um exemplo simples, que não envolve acesso a recursos como bancos de dados. Vamos tirar o peso dos ombros do pobre método e colocar nosso carro para ser mais que uma &lt;em&gt;&lt;span style=""&gt;struct&lt;/span&gt;&lt;/em&gt; de luxo...&lt;br /&gt;&lt;!--[if !supportLineBreakNewLine]--&gt;&lt;br /&gt;&lt;!--[endif]--&gt;&lt;/p&gt;   &lt;table style="border: medium none ; border-collapse: collapse;" border="1" cellpadding="0" cellspacing="0"&gt;   &lt;tbody&gt;&lt;tr&gt;   &lt;td style="border: 0.5pt solid windowtext; padding: 0cm 3.5pt; width: 448.9pt;" valign="top" width="599"&gt;   &lt;p class="MsoNormal"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 153, 153);font-family:courier new;" class="MsoNormal"&gt;&lt;span lang="EN-US"  style="font-size:85%;"&gt;class Carro {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 153, 153);font-family:courier new;" class="MsoNormal"&gt;&lt;span lang="EN-US"  style="font-size:85%;"&gt;&lt;span style=""&gt;     &lt;/span&gt;private   String placa;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 153, 153);font-family:courier new;" class="MsoNormal"&gt;&lt;span lang="EN-US"  style="font-size:85%;"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 153, 153);font-family:courier new;" class="MsoNormal"&gt;&lt;span lang="EN-US"  style="font-size:85%;"&gt;&lt;span style=""&gt;     &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;private Vaga vaga;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 153, 153);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 153, 153);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;     &lt;/span&gt;public void estacionar(Vaga v) {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 153, 153);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;         &lt;/span&gt;this.vaga = v;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 153, 153);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;         &lt;/span&gt;v.ocupar(this);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 153, 153);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;     &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 153, 153);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 153, 153);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;     &lt;/span&gt;public void sair() {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 153, 153);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;         &lt;/span&gt;vaga.setOcupante(null);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 153, 153);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;         &lt;/span&gt;this.vaga = null;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 153, 153);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;     &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 153, 153);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 153, 153);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;     &lt;/span&gt;public Vaga getVaga() {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 153, 153);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;         &lt;/span&gt;return vaga;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 153, 153);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;     &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 153, 153);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 153, 153);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 153, 153);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;class   Vaga {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 153, 153);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;     &lt;/span&gt;private Date dataEntrada;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 153, 153);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 153, 153);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;     &lt;/span&gt;private Carro ocupante;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 153, 153);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 153, 153);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;     &lt;/span&gt;public void ocupar(Carro c) {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 153, 153);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;         &lt;/span&gt;this.ocupante = c;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 153, 153);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;         &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US"  style="font-size:85%;"&gt;this.dataEntrada   = new Date();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 153, 153);font-family:courier new;" class="MsoNormal"&gt;&lt;span lang="EN-US"  style="font-size:85%;"&gt;&lt;span style=""&gt;     &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 153, 153);font-family:courier new;" class="MsoNormal"&gt;&lt;span lang="EN-US"  style="font-size:85%;"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 153, 153);font-family:courier new;" class="MsoNormal"&gt;&lt;span lang="EN-US"  style="font-size:85%;"&gt;&lt;span style=""&gt;     &lt;/span&gt;public   double getValor() {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 153, 153);font-family:courier new;" class="MsoNormal"&gt;&lt;span lang="EN-US"  style="font-size:85%;"&gt;&lt;span style=""&gt;         &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;return   (tempoEmHorasAteHoje(dataEntrada) * Estacionamento.VALOR_HORA);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 153, 153);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;     &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US"  style="font-size:85%;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 153, 153);font-family:courier new;" class="MsoNormal"&gt;&lt;span lang="EN-US"  style="font-size:85%;"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 153, 153);font-family:courier new;" class="MsoNormal"&gt;&lt;span lang="EN-US"  style="font-size:85%;"&gt;&lt;span style=""&gt;     &lt;/span&gt;public   long tempoEmHorasAteHoje(Date desde) {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 153, 153);font-family:courier new;" class="MsoNormal"&gt;&lt;span lang="EN-US"  style="font-size:85%;"&gt;&lt;span style=""&gt;         &lt;/span&gt;return   1;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 153, 153);font-family:courier new;" class="MsoNormal"&gt;&lt;span lang="EN-US"  style="font-size:85%;"&gt;&lt;span style=""&gt;     &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 153, 153);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 153, 153);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;     &lt;/span&gt;public void setOcupante(Carro c) {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 153, 153);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;         &lt;/span&gt;this.ocupante = c;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 153, 153);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;     &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 153, 153);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 153, 153);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 153, 153);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 153, 153);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;class   Estacionamento {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 153, 153);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 153, 153);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;     &lt;/span&gt;public static final double VALOR_HORA =   0.5;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 153, 153);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 153, 153);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;     &lt;/span&gt;private Vaga[] vagas = new Vaga[5];&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 153, 153);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 153, 153);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;     &lt;/span&gt;public boolean estacionar(Carro c) {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 153, 153);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 153, 153);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;         &lt;/span&gt;Vaga vagaLivre = vagaLivre();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 153, 153);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 153, 153);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;         &lt;/span&gt;if (vagaLivre == null)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 153, 153);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;              &lt;/span&gt;return false;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 153, 153);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 153, 153);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;         &lt;/span&gt;c.estacionar(vagaLivre);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 153, 153);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 153, 153);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;         &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US"  style="font-size:85%;"&gt;return   true;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 153, 153);font-family:courier new;" class="MsoNormal"&gt;&lt;span lang="EN-US"  style="font-size:85%;"&gt;&lt;span style=""&gt;     &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 153, 153);font-family:courier new;" class="MsoNormal"&gt;&lt;span lang="EN-US"  style="font-size:85%;"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 153, 153);font-family:courier new;" class="MsoNormal"&gt;&lt;span lang="EN-US"  style="font-size:85%;"&gt;&lt;span style=""&gt;     &lt;/span&gt;public   double sair(Carro c) {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 153, 153);font-family:courier new;" class="MsoNormal"&gt;&lt;span lang="EN-US"  style="font-size:85%;"&gt;&lt;span style=""&gt;         &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;Vaga vagaOcupada =   c.getVaga();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 153, 153);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 153, 153);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;         &lt;/span&gt;c.sair();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 153, 153);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;         &lt;/span&gt;return vagaOcupada.getValor();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p  style="color: rgb(51, 153, 153);font-family:courier new;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;     &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p style="color: rgb(51, 153, 153);" class="MsoNormal"&gt;&lt;span style="color: rgb(51, 204, 0);font-family:courier new;" &gt;}&lt;/span&gt;&lt;br /&gt;&lt;!--[if !supportLineBreakNewLine]--&gt;&lt;br /&gt;&lt;!--[endif]--&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt;   &lt;p class="MsoNormal"&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 153, 153);"&gt; &lt;/span&gt;&lt;br /&gt;Perceba que nesse modelo nós explicitamos um conceito. O cliente no caso quer saber o preço do uso da vaga, não do carro, e para melhor modelar isso nós criamos um objetinho com este conceito.&lt;br /&gt;&lt;br /&gt;Observe os programas. Perceba como as responsabilidades foram divididas entre os objetos participantes, como não existe mais um método (ou um conjunto de métodos) que manipula os dados, geralmente cada objeto cuida de si próprio. Essa é a idéia.&lt;br /&gt;&lt;br /&gt;De uma maneira geral: &lt;b&gt;é um &lt;i&gt;bad smell&lt;/i&gt; se seus objetos são guiados através de forças ocultas, se seus objetos se comportam como marionetes sendo manipuladas por uma função-mestre, o mestre dos fantoches.&lt;br /&gt;&lt;br /&gt;&lt;/b&gt;Isso é sintoma de um design altamente procedural, onde a lógica de negócio está implementada em funções e em como estas manipulam estruturas de dados. Você geralmente acaba com uma serie de classes (geralmente implementando o padrão &lt;i&gt;Command&lt;/i&gt;, mas por vezes são &lt;i&gt;Façades&lt;/i&gt;) coordenadoras e um bando de objetos burros que nada mais são que um agrupamento de dados relacionados.&lt;/p&gt;   &lt;p class="MsoNormal"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;p class="MsoNormal"&gt;Neste cenário e comum que simplesmente não se consiga reaproveitar lógica. E o tipo de sistema onde reusabilidade e mantida com copiar-e-colar, já que seus métodos são “gordos” demais e são tão especializados que simplesmente não servem para nada alem do que foram concebidos inicialmente. Outro sintoma deste tipo de design são métodos com muitas linhas de código.&lt;b&gt;&lt;br /&gt;&lt;br /&gt;&lt;/b&gt;Sugestão:&lt;b&gt; &lt;i&gt;divida a responsabilidade do seu método faz-tudo por objetos que dividam a responsabilidade. Modele melhor seu sistema tentando utilizar conceitos e abstrações do mundo real.&lt;o:p&gt;&lt;/o:p&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;   &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;i&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;   &lt;p class="MsoNormal"&gt;&lt;strong&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;Anatomia de um Sistema OO&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;   &lt;p class="MsoNormal"&gt;Um sistema baseado em objetos e formado por componentes (os próprios objetos) que colaboram entre si. Isso não e tão diferente de um sistema procedural, onde as funções e procedimentos devem trabalhar juntos para um baixo acoplamento e alta coesão.&lt;/p&gt;   &lt;p class="MsoNormal"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;p class="MsoNormal"&gt;Uma maneira pratica de avaliar seu modelo OO contra fantoches e mestres e o diagrama de seqüência. Observe o diagrama de seqüência de nossa primeira implementação:&lt;/p&gt;   &lt;p style="text-align: center;" class="MsoNormal"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;img src="http://photos9.flickr.com/14419357_b3e5048d6f_o.png" style="border: 1px solid rgb(0, 0, 0);" /&gt;&lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;p class="MsoNormal"&gt;O diagrama de interação e exatamente para mostrar como os objetos interagem no sistema. Veja que a interação neste caso e sempre iniciada pelo nosso mestre dos fantoches. Vamos examinar o diagrama de nossa implementação com responsabilidades distribuídas:&lt;/p&gt;   &lt;p style="text-align: center;" class="MsoNormal"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;img src="http://photos14.flickr.com/14419358_3be847747d_o.png" style="border: 1px solid rgb(0, 0, 0);" /&gt;&lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;p class="MsoNormal"&gt;Perceberam a diferença? Os objetos agora colaboram entre si, não existe uma única unidade de controle. Se você precisar estender a funcionalidade do seu sistema, agora pode reutilizar os procedimentos que foram separados do método inicial, o método &lt;span style=""&gt;estacionar()&lt;/span&gt; agora e apenas um estimulador dos outros objetos.&lt;/p&gt;   &lt;p class="MsoNormal"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;p class="MsoNormal"&gt;&lt;strong&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;Entre Flexibilidade e Produtividade&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;   &lt;p class="MsoNormal"&gt;Como sempre, o programador deve lutar entre ser flexível ou ser produtivo. Na verdade, essa e uma luta desnecessária, quando você produz software de qualidade você acaba sendo produtivo em longo prazo.&lt;/p&gt;   &lt;p class="MsoNormal"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;p class="MsoNormal"&gt;A grande dificuldade e como saber quando sua arquitetura esta flexível e quando esta flexível &lt;i&gt;demais&lt;/i&gt;. Você pidões perder dias esculpindo um framework em cima da sua aplicação, onde qualquer mudança será muito simples, mas você precisa pensar que pode ser que uma mudança brusca nunca seja necessária, e não há na maioria das vezes como saber as necessidades futuras.&lt;/p&gt;   &lt;p class="MsoNormal"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;p class="MsoNormal"&gt;Um bom modelo de objetos vai permitir que você consiga separar bem as cosias. Objetos mapeando significados do domínio, como o exemplo da &lt;span style=""&gt;Vaga&lt;/span&gt;, te dão flexibilidade próxima da flexibilidade que seu cliente tem, então se ele resolver mudar seus conceitos você pode seguir a mesma linha de raciocínio ao mudar os seus.&lt;/p&gt;   &lt;p class="MsoNormal"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;p class="MsoNormal"&gt;Refatorar seu código constantemente ajudar a manter algo simples e flexível. Siga esta pratica.&lt;/p&gt;   &lt;p class="MsoNormal"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;p class="MsoNormal"&gt;&lt;strong&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;Conclusão&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;   &lt;p class="MsoNormal"&gt;Todo mundo aprende a construir algoritmos, e algoritmos são dados fluindo entre funções. A migração de paradigma e complexa, e a literatura especializada em Java e (principalmente) J2EE não ajudam.&lt;/p&gt;   &lt;p class="MsoNormal"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;p class="MsoNormal"&gt;Existe um motivo para a criação do paradigma de orientação a Objetos. Este paradigma prove abstrações melhores e mais naturais, mais próximas do mundo. Antes de definir seu sistema, pense em como as coisas interagem no mundo, pense que objetos não são dados+funções, eles são entidades por si só, e devem colaborar. Não crie “donos da razão” no seu sistema, produza classes coesas e colaborativas.&lt;br /&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Update: &lt;/span&gt;&lt;span style="font-style: italic;"&gt;Mudei a cor dos códigos. Eu escrevi num editor de textos normal e a formatação aqui ficou uma bagunça, vou tentar definir uns CSS para o blog.&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;    &lt;p class="MsoNormal"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6820798-111564919938509038?l=pcalcado.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pcalcado.blogspot.com/feeds/111564919938509038/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6820798&amp;postID=111564919938509038&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/111564919938509038'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/111564919938509038'/><link rel='alternate' type='text/html' href='http://pcalcado.blogspot.com/2005/05/fantoches.html' title='Fantoches'/><author><name>Shoes</name><uri>http://www.blogger.com/profile/10271507933128080345</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.guj.com.br/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6820798.post-111540705504214656</id><published>2005-05-06T16:13:00.000-03:00</published><updated>2005-05-06T16:18:57.993-03:00</updated><title type='text'>Viciado</title><content type='html'>Hoje está um dia extremamente confuso, minha cabeça gira e blablabla, mas isso não é um blog para falar sobre meus sentimentos fúteis, o que importa (importa?) é meu hábito quando fico confuso, triste ou deprimido.&lt;br /&gt;&lt;br /&gt;Eu ando até uma &lt;a href="http://www.cienciaecultura.com.br/"&gt;livraria &lt;/a&gt;na Av. Sete de Setembro, onde aparecem alguns livros importados bons, e gasto meu rico dinheirinho. O escolhido dessa vez foi &lt;a href="http://www.manning.com/walls2"&gt;esse&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.manning.com/catalog/images/walls2_cover150.jpg" alt="Spring in Action" border="0" hspace="0" /&gt;    &lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Apesar dos livros aqui serem tão caros, é sempre confortante (não me pergunte porque). Eu entro lá, dou uma olhada em uns livrinhos e acho um que levo pra casa. Considerando que tem uns 5 livros na minha fila de leitura, é loucura, mas vai entender, vício é vício...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6820798-111540705504214656?l=pcalcado.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pcalcado.blogspot.com/feeds/111540705504214656/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6820798&amp;postID=111540705504214656&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/111540705504214656'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/111540705504214656'/><link rel='alternate' type='text/html' href='http://pcalcado.blogspot.com/2005/05/viciado.html' title='Viciado'/><author><name>Shoes</name><uri>http://www.blogger.com/profile/10271507933128080345</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.guj.com.br/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6820798.post-111532151965312880</id><published>2005-05-06T12:00:00.000-03:00</published><updated>2005-05-09T11:46:20.903-03:00</updated><title type='text'>Extreme Freelancer : Guia de Guerra para Freelancers</title><content type='html'>Esses dias tenho conversado via ICQ com um amigo sobre as desventuras dele enquanto &lt;span style="font-style: italic;"&gt;freelancer&lt;/span&gt;. Tentei dar dicas que aprendi quando me embranhava por essas terras distantes...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(204, 0, 0);"&gt;Histórico&lt;/span&gt;&lt;br /&gt;Eu programo desde muito novo. Não vou me alongar aqui, mas por alguns anos fui ganhando uma graninha dando consultoria básica em ASP, VisualBasic (argh!) e C em listas de discussão, coisa pouca que mal dava para eu comprar um livro de programação traduzido de 50 reais. Não demorou muito e passei a fazer programinhas como freelancer, como todo mundo do meio.&lt;br /&gt;&lt;br /&gt;Cheguei a trabalhar "oficialmente" como freelancer por algum tempo, ganhando um salário razoável pela minha experiência formal, em casa, indo duas ou três vezes por semana ter reuniões no escritório do cliente. Esse projeto acabou afundando no meio do curso, e vou tentar explicar o porque e tentar aplicar o que eu já aprendi até hoje nestes problemas.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(204, 0, 0);"&gt;Organização do Ambiente&lt;/span&gt;&lt;br /&gt;Você quer trabalhar de freelancer? Se organize. Não me importa se você é um moleque de quatorze anos que mal sabe fazer um loop (e devia estar estudando, não brincando de trabalhar!) ou um profissional tarimbado e conhecido que faz uns servicinhos de consultoria especializada: &lt;span style="font-weight: bold;"&gt;você precisa se organizar!&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Para começar, onde você trabalha? Poucos freelas têm a disposição um escritório, a maioria trabalha mesmo é no quarto, de madrugada. Se você trabalha nas suas horas de folga, estipule o tempo de trabalho, &lt;span style="font-weight: bold;"&gt;seja disciplinado com seus horários&lt;/span&gt;. Defina as horas por dia que você irá trabalhar normalmente (ocasionalmente você vai ter que fazer "hora-extra", claro), essas horas vão ser úteis também quando você calcular o preço dos seus serviços e suas entregas.&lt;br /&gt;&lt;br /&gt;O ambiente de trabalho deve ser organizado. Não é &lt;span style="font-style: italic;"&gt;sua casa&lt;/span&gt;, é &lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt;seu trabalho&lt;/span&gt;&lt;/span&gt;!&lt;span style="font-style: italic;"&gt; &lt;/span&gt;Claro que você tem muito mais liberdade que num escritório formal, mas não deixe essa informalidade te distrair. A melhor coisa a fazer é providenciar uma &lt;span style="font-weight: bold;"&gt;porta com tranca &lt;/span&gt;para o lugar onde seu computador fica (se você não morar sozinho, claro). Este lugar deve ser silencioso, se você (como eu) mora num lugar onde parece que os carros passam dentro do quarto, arrume uns fones de ouvido e coloque uma música para ouvir (se você não gosta de trabalhar com música é complicado, mas neste caso tente música instrumental - clássica é legal -, geralmente funciona e não te distrai).&lt;br /&gt;&lt;br /&gt;Desligue ou coloque em estado &lt;span style="font-style: italic;"&gt;Away &lt;/span&gt;ou &lt;span style="font-style: italic;"&gt;N/A&lt;/span&gt; todos os seus &lt;span style="font-style: italic;"&gt;Instant Messengers&lt;/span&gt;. Se você possui um sócio ou outra pessoa que pode precisar falar com você imediatamente, configure isso (IMs de verdade como o &lt;a href="http://www.icq.com/"&gt;ICQ&lt;/a&gt; te deixam fazer isso fácil fácil...), mas desative qualquer alerta que possa te incomodar. Preferencialmente, não use seu e-mail pessoal para assuntos relacionados ao trabalho extra, crie um e-mail próprio e deixe seu e-mail pessoal (cliente de e-mail ou &lt;span style="font-style: italic;"&gt;Gmail notifier&lt;/span&gt; da vida) desativado. Geralmente o freelancer tem pouquíssimo tempo para trabalhar, este tempo deve ser aproveitado o máximo possível. &lt;a href="http://www.bloglines.com/"&gt;Bloglines&lt;/a&gt; (ou outro agregador RSS/derivados) e &lt;a href="http://www.guj.com.br/forums/newMessages.java"&gt;fóruns&lt;/a&gt; então, nem pensar!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;Metodologia de Trabalho&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;Em empresas (ou em qualquer lugar com mais de uma pessoa trabalhando, às vezes mesmo om uma pessoa só...), você geralmente vai ser obrigado a usar uma metodologia X, com processos definidos por outra pessoa. Muitas empresas pequenas definem apenas um conjunto de procedimentos padrão, mas mesmo assim a liberdade não costuma ser muito alta, mesmo poruqe você está numa equipe.&lt;br /&gt;&lt;br /&gt;O fato é que se você está sozinho, não existe ninguém nem para te impôr nada nem para te ajudar a decidir o que fazer e quando. Você vai ter que se virar para desenvolver um conjunto de processos e práticas e aplicá-las.&lt;br /&gt;&lt;br /&gt;Quando você não é &lt;span style="font-style: italic;"&gt;freelancer profissional&lt;/span&gt;, quando geralmente só pega um servicinho aqui e outro ali, você costuma tratar cada projeto de modo diferente. Mesmo nesse caso, um mínimo de organização é esperado. Mesmo que você não tenha uma metodologia de trabalho definida, você deve parecer que tem uma se quiser manter clientes sérios e que acreditem no seu trabalho.&lt;br /&gt;&lt;br /&gt;Use sempre boas ferramentas. Sim, eu sei que isso serve para qualquer tipo de trabalho, mas para o freelancer é fundamental você:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;   &lt;li&gt;Ser Rápido&lt;/li&gt;   &lt;li&gt;Ser Produtivo&lt;/li&gt;   &lt;li&gt;Ter Qualidade&lt;/li&gt; &lt;/ol&gt;Ser rápido porque o cliente está em contato direto (veja abaixo) e ele vai te pedir muitas coisas. Se você for rápido o suficiente pode criar protótipos que acabam te dando mais confiança que o sistema atende ao usuário, e pode ainda criar protótipos que resutlem no fechamento de novos negócios, novas funcionalidades... sempre é bom mostrar algo para o cliente em vez de ficar só conversando eternamente sobre o que &lt;span style="font-style: italic;"&gt;poderia &lt;/span&gt;ser feito.&lt;br /&gt;&lt;br /&gt;Ser produtivo é crucial para quem trabalha no tempo vago. Você não pode gastar muito tempo para desenvolver um módulo, você tem poucas horas por dia e elas devem ser bem aproveitadas, com o que interessa. Minha dica aqui é o contrário do normal: fuja de ferramentas RAD de ponta a ponta, use apenas RAD para partes repetitivas do seu sistema, como layout de telas, relatórios e bases de dados. O que você precisa fazer para ser produtivo é ter conhecimento do seu código como um todo e manter ele sempre limpinho, refatorando sempre. Assim, você consegue mudanças rápidas, ao invés de ter que contar com &lt;span style="font-style: italic;"&gt;wizards&lt;/span&gt; bizarros e GUIs que não te dão controle nenhum.&lt;br /&gt;&lt;br /&gt;Qualidade é fundamental para o freelancer, afinal &lt;span style="font-weight: bold;"&gt;quem vai manter esse código é você!&lt;/span&gt; O cliente não quer saber quantos arquivos você vai alterar, ele quer que você implemente a funcionalidade rápido, e num projeto desses funcionalidades mudam a todo instante. Faça tudo pensando que você vai ter que corrigir bugs o tempo todo nesse código, às 3 da manhã, tendo que ir trabalhar em seu emprego formal no outro dia!&lt;br /&gt;&lt;br /&gt;Use ferramentas normais de uma empresa, um controle de versões é fundamental mesmo quando se trabalha sozinho. Bugtracking também ajuda, mas sem exageiros (todos os bugs e tarefas vão estar assinalados para você no final).&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 0, 0); font-weight: bold;"&gt;Seja Compromissado&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Meio desnecessário dizer, mas não é porque esse não é seu trabalho formal que você pode fazer um seviço qualquer. Um freelancer deve atender seu cliente exatamente como uma empresa normal, a informalidade da coisa tem que ser uma vantagem para ser mais ágil, não uma desculpa esfarrapada para atender mal.&lt;br /&gt;&lt;br /&gt;Qualquer freelancer de verdade sabe que seu nome e reputação valem mais do que ele mesmo pode pagar. Combine coisas verbalmente, mas formalize pelo menos com um e-mail para não ficar no &lt;span style="font-style: italic;"&gt;disse-me-disse&lt;/span&gt; e discutindo com o cliente coisas que possivelmente tenham sido ditas. Tenha certeza que vocês estão falando a mesma língua.&lt;br /&gt;&lt;br /&gt;Se for atrasar, avise. Combine uma reunião periódica frequente para controle do cronograma, pode ser um telefonema, mas tenha um ponto de referência. Se você não pode fazer reuniões com o cliente no horário do expediente, deixe isso claro já no início do projeto e proponha uma alternativa, reuniões por telefone, logo após o expediente ou nos sábados, por exemplo.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(204, 0, 0); font-weight: bold;"&gt;Conheça seu Cliente&lt;/span&gt;&lt;br /&gt;Como um profissional autônomo, você dificilmente vai pegar grandes projetos (quebrei suas ilusões?). Geralmente quem solicita serviços de freelancers são empresas de micro e pequeno porte que precisam de algo altamente customizado e não têm dinheiro para contratar uma das bigs (mas, na verdade, era isso que eles queriam fazer). Assim, você tem a grande oportunidade de conhecer todo funcionários da empresa cliente (sim, todos os 3 funcionários) , do dono do negócio à menina do caixa. Use isso.&lt;br /&gt;&lt;br /&gt;Conhecer o dono do negócio é ótimo, você fica sabendo das espectativas, das necessidades e do que ele pretende fazer (é claro, tudo muito exagerado...), mas não se esqueça dos usuários (sim, todos os dois).&lt;br /&gt;&lt;br /&gt;Certa vez trabalhei na migração de uma rede de nove computadores de Windows 98 para GNU/Linux. Tudo meticulosamente planejado, eu contratei um técnico especializado neste tipo de serviço, mas como todo bom moleque de dezenove anos (não que eu seja muito menos moleque aos 22), eu esqueci que quem ia usar o sistema não era a pessoa que eu lidava, dono do negócio.&lt;br /&gt;&lt;br /&gt;E lá fui eu para a primeira sessão de treinamento em &lt;a href="http://www.openoffice.org/"&gt;OpenOffice.org&lt;/a&gt;, achando que estava tudo perfeito. Já tinha convertido todos os formulários-padrão para o novo sistema, instalado uma versão customizada e amigável de KDE...quando um dos funcionários me pergutna sobre os 30 e poucos macros que ele fizera no Excel para acelerar um processo interno qualquer. O diretor falou que esqueceu de me avisar, e ninguém além daquele carinha tida consciência que aqueles macros eram super importantes, só ele os utilizava! E lá vai o Phillip converter macros VBA para OO.org... mas eu não entendia as macros, elas eram relativas ao negócio, isso seria praticamente desenvovler um sistema (o que nãoe stava no contrato).&lt;br /&gt;&lt;br /&gt;Ficou acertado que o funcionário usaria Excel num Windows XP até que conseguíssemos solucionar este problema...que não era o único. As pessoas da empresa trataram a migração como uma coisa imposta e não-desejada (Afinal, para eles era apenas a empresa economizando em licenças). Considerando que a empresa ficava muito longe da minha casa, acho que se ônibus tivesse programa de milhagem eu poderia viajar paraa Europa de graça de tantas vezes que tive que ir resolver problemas. E não, não eram problemas grandes, eram coisas do tipo:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;- Isso aqui &lt;/span&gt;&lt;span style="font-style: italic; color: rgb(204, 102, 0);"&gt;(Mozilla)&lt;/span&gt;&lt;span style="color: rgb(204, 102, 0);"&gt; não funciona!&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;- Não? o que aconteceu?&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;- Eu tento entrar no site www.abcd.com.br e dá erro na conexão&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;- Uhm...peraí..esse aqui não é o cabo de rede da sua máquina?&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;- Não sei, é?&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;- Você arrancou?&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;- Ah, acho que esbarrei aí sim... mas deixa disso, esse tal Linux não funciona!&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;- Por acaso o Windows tinha Internet sem cabo de rede?!?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Evite boicote: aproveite o fato de você ter apenas meia dúzia de usuários e converse com todos eles, tente agradar a todos (mesmo sabendo que quem te paga é o dono do negócio apenas). Isso vai te economizar muita dor de cabeça.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(204, 0, 0);"&gt;Seja Ágil&lt;/span&gt;&lt;br /&gt;Metodologias ágeis são complicadas de aplicar em empresas grandes, mas quando sua empresa é você apenas elas podem ajudar e muito.&lt;br /&gt;&lt;br /&gt;Estude um pouco de &lt;a href="http://www.extremeprogramming.org/"&gt;XP&lt;/a&gt;. Você não precisa aplicar todas as práticas (algumas nem vai conseguir, como &lt;span style="font-style: italic;"&gt;pair programming&lt;/span&gt;), mas se aproveite da situação para aplicar o máximo destes conceitos de agilidade e foco no cliente. Não vou explicar para você os conceitos aqui, procure um livro ou algo do tipo, mas algumas idéias básicas de como isso pode te ajudar seguem.&lt;br /&gt;&lt;br /&gt;Pegue os requisitos diretamente com seu cliente. Não importa muito a técnica, mas eu sugiro que você dê uma olahda em &lt;a href="http://www.extremeprogramming.org/rules/userstories.html"&gt;User Stories&lt;/a&gt;. O importante é que você defina os requisitos com a maior participação do cliente possível.&lt;br /&gt;&lt;br /&gt;Como freelancer, você tem que estar pronto para mudanças. O cliente vai mudar tudo toda hora, e como não tem muita burocracia, você tem que se preparar para isso (tirar proveito disso, até). Faça um Plano de Releases pequenos, vá acrescentando funcionalidades ao sistema de pouco em pouco, a cada release. Conforme vai vendo o sistema, o cliente vai mudando (calma, não ache que vai trabalhar de graça, leia abaixo sobre contratos, isso pode ser é muito bom financeiramente) e você vai repriorizando suas entregas.&lt;br /&gt;&lt;br /&gt;Tenha seu cliente sempre à mão, celular dele colado com &lt;span style="font-style: italic;"&gt;post-it&lt;/span&gt; no monitor.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 0, 0); font-weight: bold;"&gt;Tenha um Advogado&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Isso é sério. Você não precisa &lt;span style="font-weight: bold;"&gt;&lt;span style="font-style: italic;"&gt;ter&lt;/span&gt;&lt;/span&gt; um advogado contratado, mas tenha pelo menos uma boa indicação de um. Se for amigo ou parente seu melhor, o explore e use para revisar e redigir contratos (pagando apenas uns chopps).&lt;br /&gt;&lt;br /&gt;O Luca, amigo de GUJ, me falou uma coisa sobre &lt;span style="font-style: italic;"&gt;profilers &lt;/span&gt;que se aplica a advogados também:&lt;br /&gt;&lt;blockquote&gt;Você nunca aprende a usar um profiler antes de &lt;span style="font-weight: bold;"&gt;&lt;span style="font-style: italic;"&gt;precisar&lt;/span&gt;&lt;/span&gt; usar um profiler, mas geralmente quando você for precisar, não vai ter tempo para aprender nada, tem é que consertar os problemas rápido!&lt;/blockquote&gt;Então já tenha pelo menos o telefone de alguém que vai poder te ajudar se as coisas derem &lt;span style="font-weight: bold;"&gt;&lt;span style="font-style: italic;"&gt;muito&lt;/span&gt;&lt;/span&gt; erradas.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 0, 0); font-weight: bold;"&gt;Contratos Abertos&lt;/span&gt;&lt;br /&gt;Isso parece meio louco, mas funciona muito bem, principalmente nesse caso.&lt;br /&gt;&lt;br /&gt;Para cada módulo de seu sistema, defina um valor em horas (ou defina pontos, é mais XP). Defina um valor por ponto e se comprometa a entregar X pontos por mês, cobrando o equivalente.&lt;br /&gt;&lt;br /&gt;Quando você entrega um módulo, o cliente pode querer alterar algo (ele vai querer!), avalie a alteração em pontos, repriorize suas entregas pro próximo mês (ou semana, ou duas semanas...).&lt;br /&gt;&lt;br /&gt;Então, crie seu contrato de maneira que o escopo seja aberto. O cliente estaria pagando R$Y por X pontos por mês. Não se iluda em &lt;span style="font-style: italic;"&gt;terminar o projeto&lt;/span&gt;, um projeto de software só acaba quando o programa é deletado dos computadores definitivamente e sai de uso.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0); font-weight: bold;"&gt;Conclusão e História Triste&lt;/span&gt;&lt;br /&gt;Bom, se eu tivesse seguido algumas dessa dicas eu não teria passado por uma situação muito infeliz há alguns anos.&lt;br /&gt;&lt;br /&gt;Eu trabalhava então full-time para uma empresa desenvolvendo um sistema de laudos. A idéia era simpels: cinco módulos, pagamento por mês.&lt;br /&gt;&lt;br /&gt;Os módulos eram:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;Gerência de Estoque&lt;/li&gt;   &lt;li&gt;Gerência de Laudos&lt;/li&gt;   &lt;li&gt;Gerência de usuários&lt;/li&gt;   &lt;li&gt;Agenda Coorporativa&lt;/li&gt;   &lt;li&gt;Geração de um Laudo Especial&lt;/li&gt; &lt;/ul&gt; Baseado na dificuldade que eu via nas coisas, eu defini a entrega na ordem:&lt;br /&gt;&lt;ol&gt;   &lt;li&gt;Gerência de usuários&lt;/li&gt;   &lt;li&gt;Gerência de Estoque&lt;/li&gt;   &lt;li&gt;Agenda Coorporativa&lt;/li&gt;   &lt;li&gt;Geração de um Laudo Especial&lt;/li&gt;   &lt;li&gt;Gerência de Laudos&lt;/li&gt; &lt;/ol&gt; O gerenciador de laudos tinha umas customizações muito complicadas...&lt;br /&gt;&lt;br /&gt;Começaram as complicações no desenvolver do projeto, no início eu tinha muito tempo para isso, mas depois arrumei um emprego formal, isso acabou com meu tempo (some, é claro, a faculdade). Simplesmente não conseguia arrumar tempo para trabalhar, quando chegava em casa, as 23 horas, dormia. Fins de Semana eu tentava, mas sempre tinha alguém para me encher o saco (ou arrumar um lugar pra sair e não trabalhar...).&lt;br /&gt;&lt;br /&gt;Em paralelo, começou uma dificuldade tecnológica. A idéia inicial era desenvovler em Delphi (ugh!), mas o ambiente passou para GNU/Linux e eu tentei o Kylix. Depois de muito tempo xingando o bichinho (injustamente), passei para Java, e tive que me virar para aprender a programar com um &lt;span style="font-style: italic;"&gt;JBuilder 5&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;O usuário passou a me ligar diariamente cobrando a entrega. Eu propus mostrar uma apresentação sobre o sistema e fiz um bando de telas em um editor GTK WYSIWYG, colei num powerpoint. Foi bom em parte para solucionar algumas duvidas com a interface, mas o cliente reclamou, ele queria ver algo funcionando, mesmo que um protótipo.&lt;br /&gt;&lt;br /&gt;Bem, enfim primeira iteração: entreguei o gerenciador de usuários. Enquanto o usuário descobria bugs no sistema, eu tentava preparar o outro módulo. Enquanto isso ele me pedia para ver como estavam os módulos, eu desconversava.&lt;br /&gt;&lt;br /&gt;Quando entreguei os 3 primeiros módulos, atrasados claro, o cliente começou a reclamar que estava gastando &lt;span style="font-style: italic;"&gt;rios de dinheiro&lt;/span&gt; e não via retorno.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;- É...a gente paga, paga..e nada... temos que ver isso, heim..&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;- Como assim? Eu já entreguei três módulos!&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;- Que não fazem nada de útil pra minha empresa. Na verdade, eu tinha pedido esses módulos como complemento, se eles não funcionarem eu não vou ligar muito.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;- Hum...é verdade, mas pelo manos temos alguma coisa...&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;- Que não me serve para nada.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Pois é. Eu fiz minha agenda de entregas baseado no que era bom para mim, não pro cliente.&lt;br /&gt;&lt;br /&gt;No final das contas, o módulo de laudos atrasou mais três meses. Eu já não tinha tempo nem de respirar, tinha que faltar ao trabalho constantemente para tentar trabalhar em casa, mas mesmo assim não adiantava. Ocasionalmente meu computador tinha algum problema e eu perdia um ou dois dias de trabalho.&lt;br /&gt;&lt;br /&gt;O final da triste história foi a contratação de uma empresa externa para fazer auditoria. Os caras viram que muita cosia havia sido entregue, e como eles foram tão &lt;span style="font-style: italic;"&gt;técnicos&lt;/span&gt; quanto eu, acharam normais os atrasos. Acabou com o cliente cancelando o cotnrato e ficando com três módulos que não faziam nada de útil, além do prejuízo de um ano de desenvolvimento mais um mês de auditoria que não deram em nada.&lt;br /&gt;&lt;br /&gt;Imaturidade minha, falta de preparação. A minha sorte é que eu tinha meu emprego formal, porque meu moral ficou muito baixo, sem falar no meu bolso vazio. Depois deste, eu já peguei diversos outros projetos como freelancer e acabei descobrindo práticas melhores para resolver o problema ue eu tinha. Elas funcionam comigo, acredito que outras pessoas possam se beneficiar também.&lt;br /&gt;&lt;br /&gt;Hoje em dia dificilmente pego um &lt;span style="font-style: italic;"&gt;freela&lt;/span&gt;, falta de tempo e de paciência não deixam, mas da minha experiência não tão grande, não tão pequena, tirei essas dicas que espero que ajudem.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 0, 0); font-weight: bold;"&gt;Update:&lt;/span&gt;&lt;br /&gt;&lt;a href="http://www.guj.com.br/user/profile/4889.java"&gt;Renato Santos da Silva&lt;/a&gt;, o meu amigo citado no início do post, está escrevendo (trabalho em andamento!) uma versão compilada e com acréscimos dele &lt;a href="http://geocities.yahoo.com.br/renato3110/XPT.pdf"&gt;aqui&lt;/a&gt;. Ele também deu o nome de &lt;span style="font-style: italic;"&gt;Extreme Freelancer&lt;/span&gt; :)&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6820798-111532151965312880?l=pcalcado.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pcalcado.blogspot.com/feeds/111532151965312880/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6820798&amp;postID=111532151965312880&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/111532151965312880'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/111532151965312880'/><link rel='alternate' type='text/html' href='http://pcalcado.blogspot.com/2005/05/extreme-freelancer-guia-de-guerra-para.html' title='Extreme Freelancer : Guia de Guerra para Freelancers'/><author><name>Shoes</name><uri>http://www.blogger.com/profile/10271507933128080345</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.guj.com.br/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6820798.post-111513374271891271</id><published>2005-05-03T11:49:00.000-03:00</published><updated>2005-05-03T13:35:37.956-03:00</updated><title type='text'>Sun Certified Java Compiler</title><content type='html'>Ontem, o &lt;a href="http://www.guj.com.br/user/profile/2128.java"&gt;Vinci&lt;/a&gt; apresentou uma palestra no &lt;a href="http://www.riojug.org/"&gt;RioJUG&lt;/a&gt; sobre certificação JCP. A palestra estava cheia, assim como estão sempre os&lt;a href="http://www.guj.com.br/forums/show/11.java"&gt; fórums dedicados ao assunto&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Que &lt;span style="font-weight: bold;"&gt;certificação não prova nada&lt;/span&gt;, todo mundo sabe, então não vou chover no molhado. Se você gastar cinco minutos lendo os posts em um fórum ou uma lista de discussão, vai perceber que nem mesmo conhecimento da sintaxe de uma linguagem ela prova. Já contei essa história, mas vamos novamente...&lt;br /&gt;&lt;br /&gt;Há exatamente um ano atrás eu quis mudar de emprego. Espalhei uns curriculuns e fui a algumas entrevistas. Uma agência de RH especializada em informática aqui no Rio me aplicou mocks de SCJP duas vezes.&lt;br /&gt;&lt;br /&gt;Como eu não sou exatamente um newbie em Java e as provas da Sun são muito bestas (&lt;span style="font-style: italic;"&gt;compila ou não compila, por que?&lt;/span&gt;), me saí relativamente bem nelas. Quando ia para a segunda etapa da seleção, vinha a pergunta da entrevistadora:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;span style="color: rgb(153, 0, 0); font-style: italic;"&gt;- Então, você tem certificação de programador Java?&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0); font-style: italic;"&gt;- Você leu isso no meu curriculum?!?&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0); font-style: italic;"&gt;- Não, mas pelo resultado da prova...&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0); font-style: italic;"&gt;- Não, não tenho não.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;E lá ia a proposta de trabalho pela janela. Fiquei tão estressado com isso que liguei para a Sun e pedi meu voucher. Por uma coincidência (se você acredita nisso) a menina da Sun errou meu e-mail e o boleto nunca chegou, nesse meio tempo recebi uma proposta bem melhor de trabalho.&lt;br /&gt;&lt;br /&gt;Conclusões que tirei:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Se você precisa de trabalho, tire uma certificação. Não prova nada, não custa tanto assim, é fácil e você fica bem nivelado no mercado.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A única utilidade da certificação é arrumar emprego mais facilmente. Sinceramente eu não vejo diferença entre mostrar um certificado ou escrever um programa simples em Java, mas ninguém tem tempo para aplicar provas concretas num processo seletivo, você não tem tempo de escrever um programa para a seleção e a empresa não tem tempo para ler sei lá quantos programas escritos pelos seus candidatos.&lt;br /&gt;&lt;br /&gt;Falando do lado do empregador, eu ainda acredito no papo durante a entrevista. Diz um colega meu que para você se dar bem em qualquer entrevista basta ler a introdução e primeiro capítulo de todos os livros da moda. Ali está todo o resumo do livro, e você pode impressionar seu entrevistador. Cabe ao carinha fazendo perguntas descobrir se o que a pessoa diz que sabe é verdade, e um bom técnico sabe como fazer isso.&lt;br /&gt;&lt;br /&gt;Falsos positivos são ótimos, você fala uma coisa irreal pra pessoa e pergutna a opnião dela, o bom enrolador vai te fazer acreditar que aquilo é verdade. Contrate esse cara... como vendedor, não como técnico. Um bom técnico tem que saber um mínimo teórico sobre a tecnologia que utiliza. Saber pelo menos os conceitos de tecnologias novas (bola da vez: AOP, IoC, Java 5 e linguagens de script).&lt;br /&gt;&lt;br /&gt;Se você exige proficiência em uma ferramenta específica, faça um teste &lt;span style="font-style: italic;"&gt;hands on&lt;/span&gt;, mas não deixe de averiguar se a pessoa em questão sabe o que está por trás da ferramenta.&lt;br /&gt;&lt;br /&gt;Como tudo que escreve, Joel Spolsky tem &lt;a href="http://www.joelonsoftware.com/articles/fog0000000073.html"&gt;um bom texto&lt;/a&gt; sobre esse assunto de entrevista.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6820798-111513374271891271?l=pcalcado.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pcalcado.blogspot.com/feeds/111513374271891271/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6820798&amp;postID=111513374271891271&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/111513374271891271'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/111513374271891271'/><link rel='alternate' type='text/html' href='http://pcalcado.blogspot.com/2005/05/sun-certified-java-compiler.html' title='Sun Certified Java Compiler'/><author><name>Shoes</name><uri>http://www.blogger.com/profile/10271507933128080345</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.guj.com.br/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6820798.post-111513046150162769</id><published>2005-05-03T11:27:00.000-03:00</published><updated>2005-05-03T11:39:40.730-03:00</updated><title type='text'>Sinceramente...</title><content type='html'>Esse blogger tá me dando saudades do &lt;a href="http://www.jroller.com/"&gt;JRoller&lt;/a&gt;...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6820798-111513046150162769?l=pcalcado.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pcalcado.blogspot.com/feeds/111513046150162769/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6820798&amp;postID=111513046150162769&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/111513046150162769'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/111513046150162769'/><link rel='alternate' type='text/html' href='http://pcalcado.blogspot.com/2005/05/sinceramente.html' title='Sinceramente...'/><author><name>Shoes</name><uri>http://www.blogger.com/profile/10271507933128080345</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.guj.com.br/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6820798.post-111513025015660583</id><published>2005-05-03T11:04:00.000-03:00</published><updated>2005-05-03T11:28:50.610-03:00</updated><title type='text'>Nova casa</title><content type='html'>Após algum tempo sem escrever nada, voltei :)&lt;br /&gt;&lt;br /&gt;O &lt;a href="http://www.jablo.com.br/"&gt;Jablo&lt;/a&gt; já era (tenho que recuperar a os meus posts antigos...), era um projeto muito bom, mas faltou infra-estrutura. Há algum tempo eu registrei o domínio &lt;a href="http://www.fragmental.com.br/"&gt;fragmental.com.br&lt;/a&gt;, e com o fim do meu blog resolvi utilizar este espaço.&lt;br /&gt;&lt;br /&gt;Procurei uma ferramenta de bliki, porém problemas com meu host (suporte terrível!) e burrice minha me fizeramd esistir das alternativas que encontrei. Decidi iniciar um projeto de um bliki simples, &lt;a href="http://www.guj.com.br/posts/list/0/21032.java"&gt;algumas pessoas se interessaram&lt;/a&gt; mas o projeto (como tantos) acabou morrendo.&lt;br /&gt;&lt;br /&gt;Bem, ressuscitei a idéia há pouco. Escrevi algum código e&lt;a href="https://jrapido.dev.java.net/"&gt; requisitei um projeto no java.net&lt;/a&gt;. Como tive problemas com meu computador de casa e meu firewall coorporativo bloqueia CVS, devo estar comitando algum código hoje, a idéia é ser bem incremental e beeem lento, porque eu não tenho muito tempo. Se você se itneressar pelo projeto, por favor fique a vontade para pedir um papel.&lt;br /&gt;&lt;br /&gt;Equanto isso, minha blogorréia me fez criar um blog aqui no Blogger e redirecionar meu domínio para cá. Enquanto o JRapido não fica usável, vcoês três ou quatro vão poder ler minhas ideías tortas e hippies aqui.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6820798-111513025015660583?l=pcalcado.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pcalcado.blogspot.com/feeds/111513025015660583/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6820798&amp;postID=111513025015660583&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/111513025015660583'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6820798/posts/default/111513025015660583'/><link rel='alternate' type='text/html' href='http://pcalcado.blogspot.com/2005/05/nova-casa.html' title='Nova casa'/><author><name>Shoes</name><uri>http://www.blogger.com/profile/10271507933128080345</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.guj.com.br/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg'/></author><thr:total>0</thr:total></entry></feed>
