<?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-19831061</id><updated>2011-07-17T18:28:40.394-03:00</updated><title type='text'>Log4Dev - Miguel Galves</title><subtitle type='html'>Notas sobre tecnologia - Programação, Java, XML, Javascript, AJAX, Web, Linux, Mac, e outras coisas do genero. Por Miguel Galves e Leonardo Garcia.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>87</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-19831061.post-116022848684380157</id><published>2006-10-07T10:41:00.000-03:00</published><updated>2006-10-07T10:41:27.390-03:00</updated><title type='text'>Novo endereço</title><content type='html'>Este blog mudou de endereço !&lt;br&gt;&lt;br&gt;Acesse &lt;a href="http://log4dev.wordpress.com"&gt;http://log4dev.wordpress.com.&lt;/a&gt;&lt;br&gt;&lt;br&gt;Motivos da mudança ?&lt;br&gt;&lt;br&gt;Bom, inicialmente foi porque o blogger nos deixou quase uma semana fora do ar. Depois de alguns dias fui atrás de novas opções, e descobri o WordPress.&amp;nbsp; Obviamente, neste dia, o blogger nos colocou no ar novamente. Mas Chegamos à conclusão que o WordPress oferecia umas funcionalidades bem interessantes, como busca e categorização, além de ser um projeto aberto. &lt;br&gt;&lt;br&gt;Este blog continuará no ar....pelo menos por algum tempo.&lt;br&gt;&lt;br&gt;Atenciosamente&lt;br&gt;&lt;br&gt;Equipe Log4Dev&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19831061-116022848684380157?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/116022848684380157/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=116022848684380157' title='39 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/116022848684380157'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/116022848684380157'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2006/10/novo-endereo.html' title='Novo endereço'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>39</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-115932205336966839</id><published>2006-09-26T22:54:00.000-03:00</published><updated>2006-09-26T22:54:13.456-03:00</updated><title type='text'>Longevidade dos Macs</title><content type='html'>Visitem o site &lt;a href="http://www.lisa2.com/"&gt;http://www.lisa2.com/.&lt;/a&gt;&lt;br&gt;&lt;br&gt;Nada demais..apenas algumas poucas páginas HTML bem simples. O interessante do site é que ele roda num Apple Lisa, o primeiro computador desenvolvido pela Apple, no início dos anos 80!!!! O site fornece a configuração da máquina e mostra fotos. &lt;br&gt;&lt;br&gt;Aqui em casa tenho um Mac SE, comprado em 1989, com 2MB de RAM, 20MB de HD e 8MHz de clock. Ele ainda dá no couro, tem um ótimo editor TeX, um Word de 400k, um jogo de Xadrez, Mah-Jong....deu vontade de montar um servidorzinho nele. O problema é que não tenho placa Ethernet. Mas já vi na internet placas por poucos dólares. Quem sabe :-) &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19831061-115932205336966839?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/115932205336966839/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=115932205336966839' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/115932205336966839'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/115932205336966839'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2006/09/longevidade-dos-macs.html' title='Longevidade dos Macs'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-115927940402262191</id><published>2006-09-26T11:03:00.000-03:00</published><updated>2006-09-26T11:03:24.100-03:00</updated><title type='text'>Interfaces</title><content type='html'>Outro dia, li &lt;a href="http://www.joelonsoftware.com/items/2006/09/19b.html"&gt;este artigo do Joel&lt;/a&gt; que faz um review às avessas de um celular, e me lembrei de um problema de interfaces que eu presenciei recentemente.&lt;br&gt; &lt;br&gt;Estava no Banco do Brasil, esperando na fila para usar a única máquina que emitia cheques da agência. Na minha frente, um senhora estava tentando fazer algo bem simples: imprimir um extrato. A sequência era mais ou menos essa: &lt;br&gt;&lt;br&gt;&lt;ol&gt;&lt;li&gt;Insere e retira o cartão do leitor&lt;/li&gt;&lt;li&gt;Selecione a opção desejada (são necessários uns 3 cliques até selecionar Extrato impresso)&lt;/li&gt;&lt;li&gt;Digite sua senha de 6 digitos&lt;/li&gt;&lt;li&gt;Digite seu código de 3 letras &lt;/li&gt;&lt;li&gt;Insira e retire seu cartão para confirmar&lt;br&gt;&lt;/li&gt;&lt;/ol&gt;Neste momento, se tudo desse certo, o extrato seria impresso. Só que no caso dela, provavelmente o cartão estava bloqueado por algum motivo. O resultado era que a seguinte mensagem aparecia na tela:  &lt;span style="font-weight: bold;"&gt;Cartão bloqueado, utilize Terminal BB. &lt;/span&gt;A senhora em questão olhava a mensagem estupefata e repetia a operação....istou durou uns 10 minutos, até ela desistir.&lt;br&gt;&lt;br&gt;É interessante analisar um fato: a senhora esta numa agência do Banco do Brasil, também conhecida como BB, usando um Terminal. Dificilmente consigo achar uma definição melhor para isso do que Terminal BB. O seja, basicamente o sistema mandava ela utilizar um terminal do banco do brasil pra resolver a questão do cartão dela, coisa que ela já estava fazendo, e mesmo assim não deu certo.  &lt;br&gt;&lt;br&gt;Isto já aconteceu comigo ! E devo dizer que ainda não sei como o Terminal BB pode me ajudar, porque eu pesquisei várias opções e nenhuma delas era a boa. Quando bloqueei meu cartão, a única salvação foi ir até a minha agência de origem e desbloquear com o gerente. Daí, ia até o terminal bb pra emitir uma nova senha. &lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19831061-115927940402262191?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/115927940402262191/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=115927940402262191' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/115927940402262191'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/115927940402262191'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2006/09/interfaces.html' title='Interfaces'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-115923649863969680</id><published>2006-09-25T23:08:00.000-03:00</published><updated>2006-09-25T23:08:18.646-03:00</updated><title type='text'>Lambda Probe</title><content type='html'>Pra quem desenvolve ou monitora aplicativos rodando em &lt;span style="font-weight: bold;"&gt;Tomcat/JBoss&lt;/span&gt;, a ferramenta &lt;span style="font-weight: bold;"&gt;LambdaProbe&lt;/span&gt;  pode ser de grande valia. Este aplicativo web, que roda dentro do próprio servidor de aplicações, fornece uma interface web bastante intuitiva fornecendo uma grande quantidade de informações úteis. Dentre elas, a lista de aplicativos instalados e ativos no servidor, número de sessões por aplicativos, objetos salvos na sessão, datasources, memória utilizada e acesso aos logs de servidor. Além disso, permite executar deploy, undeploy, start e stop de cada aplicativo. Pode ser instalado a partir do site  &lt;a href="http://www.lambdaprobe.org"&gt;www.lambdaprobe.org&lt;/a&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19831061-115923649863969680?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/115923649863969680/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=115923649863969680' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/115923649863969680'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/115923649863969680'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2006/09/lambda-probe.html' title='Lambda Probe'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-115906013006928389</id><published>2006-09-23T21:57:00.000-03:00</published><updated>2006-09-23T22:08:50.070-03:00</updated><title type='text'>Funções inline 2</title><content type='html'>O meu último artigo com o título de "&lt;a href="http://log4dev.blogspot.com/2006/09/funes-inline.html"&gt;Funções inline&lt;/a&gt;" acabou gerando uma contestação interessante, dizendo que o artigo ao qual eu me referenciava não se tratava de funções inline mas, sim, de conceitos relativos a uso de funções em linguagens que suportam programação funcional.

Bom, como não sou dono da verdade, fui atrás de uma definição formal de funções inline e eu estava errado. Certamente um melhor título para o artigo seria "Funções e programação funcional" ou alguma coisa do tipo.

Para deixar os conceitos mais claros, segue uma boa definição de &lt;a href="http://en.wikipedia.org/wiki/Inline_function"&gt;funções inline&lt;/a&gt;. Segundo a definição formal, funções inline são parecidas com o conceito de macros que aparece em muitas linguagens de programação. Eu acabei usando o termo funções inline de forma indiscriminada no meu artigo para referenciar a capacidade de se declarar funções anonimamente na mesma linha em que se está chamando uma outra função (isto, em inglês, acaba sendo chamado como "inline" também, mas significa outra coisa).

Enfim, espero que esteja esclarecido este ponto. Sempre é bom ouvir outros pontos de vista e esclarecer nomenclaturas! :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19831061-115906013006928389?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/115906013006928389/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=115906013006928389' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/115906013006928389'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/115906013006928389'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2006/09/funes-inline-2.html' title='Funções inline 2'/><author><name>Leonardo Garcia</name><uri>http://www.blogger.com/profile/08772967219176422013</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-115850679153539802</id><published>2006-09-17T12:26:00.000-03:00</published><updated>2006-09-17T12:26:31.646-03:00</updated><title type='text'>NeoOffice Aqua</title><content type='html'>A versão Aqua do NeoOffice já está disponível para download. Pra quem não sabe, o NeoOffice é um porte do pacote OpenOffice nativo para o Mac OS X. O OpenOffice tem um porte oficial para Mac, mas depende do uso do servidor X pra funcionar. O endereço para download do NeoOffice é  &lt;a href="http://www.neooffice.org/"&gt;http://www.neooffice.org/.&lt;/a&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19831061-115850679153539802?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/115850679153539802/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=115850679153539802' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/115850679153539802'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/115850679153539802'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2006/09/neooffice-aqua.html' title='NeoOffice Aqua'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-115841863790638092</id><published>2006-09-16T11:46:00.000-03:00</published><updated>2006-09-16T11:57:17.926-03:00</updated><title type='text'>Java.io.File</title><content type='html'>Outro dia estava desenvolvendo um programa em Java e precisei manipular alguns arquivos. Até ai, tudo bem. Java, para variar, possui um conjunto de classes em sua API padrão específica para tratamento de arquivos no pacote java.io.

Mais especificamente, eu estava usando a classe java.io.File, que possui uma abstração para acesso de arquivos independente do sistema operacional. Foi ai que tive um problema inesperado quando precisei de criar um link simbólico.

Para aqueles que não estão acostumados com o conceito, um link simbólico é, simplificadamente, um arquivo especial que no fundo só é um apontador para outro arquivo. Quem quiser maiores informações pode ler &lt;a href="http://http://www.blogger.com/img/gl.link.gif"&gt;aqui&lt;/a&gt;. Este conceito de arquivo é muito usado em sistemas *nix, mas hoje ele está presente em outros sistemas também, como o Windows.

Apesar de ser um conceito muito bem difundido, para meu espanto, a classe java.io.File não consegue criar um link simbólico! O engraçado é que ela faz várias outras coisas: cria arquivos, cria diretórios, apaga arquivos, renomeia arquivos... Mas não cria links simbólicos!

Imaginei que poderia haver alguma outra forma de se criar um link simbólico em Java, mas após uma pesquisa rápida não achei nenhuma solução prática que não fosse a execução direta no sistema operacional do comando que cria links simbólicos, o que não é uma solução muito boa pois é dependente de sistema operacional e, se estamos programando em Java, uma das coisas que provavelmente estamos buscando é portabilidade (e, no meu caso, isto é verdade).

Para aumentar ainda mais minha perplexidade, achei um bug aberto no bug tracker da Sun descrevendo este problema em 1997. Só que o bug continua aberto e sendo atualizado com informações. Um dos últimos posts neste bug diz que talvez no Java 7 (que ainda está meio longe de aparecer, ainda estamos no Java 5) a interface para manipulação de arquivos em Java irá mudar (http://bugs.sun.com/bugdatabase/view_bug.do;:YfiG?bug_id=4042001 e http://bugs.sun.com/bugdatabase/view_bug.do;?bug_id=4313887).

Provavelmente esta funcionalidade foi deixada de lado na classe Java.io.File para que Java pudesse manter compatibilidade com todos os sistemas operacionais que rodam Java. No entanto, por ser uma funcionalidade muito aceita e muito útil, acho que o certo seria termos uma interface Java.io.IFile que possuisse todos os métodos e, cada sistema operacional teria sua implementação especifica desta interface. Estes detalhes, inclusive, poderiam ser totalmente abstraídos para o desenvolvedor, que poderia continuar usando a classe Java.io.File. A única coisa é que se ele tentasse criar um link simbólico em um sistema de arquivos que não suportasse isso, uma exceção seria gerada.

É pitoresco como uma linguagem muito utilizada como Java possui uma deficiência grave como esta. Alias, na minha opinião, a interface de manipulação de arquivos como um todo em Java é bem fraca. Não existe, também, um mecanismo atômico para copia de arquivos. Se alguém quiser copiar um arquivo, acho que a melhor solução será abrir um streaming para ler um arquivo, criar um novo arquivo e abrir outro streaming copiando todo o conteúdo do arqiuvo original. Algo muito mecânico se comparado com algumas outras grandes facilidade proporcionadas pela plataforma Java.

Enfim, apesar de Java ter muitas facilidades, é necessário algumas evoluções am alguns campos ainda. Apesar da minha reclamação, de certa forma isto é natural. Se todos os sistemas que existissem não precisassem de evolução a computação por si só perderia sentido.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19831061-115841863790638092?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/115841863790638092/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=115841863790638092' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/115841863790638092'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/115841863790638092'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2006/09/javaiofile.html' title='Java.io.File'/><author><name>Leonardo Garcia</name><uri>http://www.blogger.com/profile/08772967219176422013</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-115802139943583633</id><published>2006-09-11T21:23:00.000-03:00</published><updated>2006-09-12T06:28:42.696-03:00</updated><title type='text'>Funções inline</title><content type='html'>Seguindo a onda do Miguel, segue mais um artigo muito interessante do Joel sobre &lt;a href="http://www.joelonsoftware.com/items/2006/08/01.html"&gt;funções inline&lt;/a&gt; e sua grande aplicabilidade.

É interessante como são poucas as lingugens ditas comercias e amplamente difundidas que possuem está funcionalidade. Tudo bem que está não é uma funcionalidade extremamente essencial nem sempre útil, mas pode facilitar muito a vida em determinadas situações.

É impressionante também como o Joel escreve bem.  :)

Ah, e não sei se vocês perceberam, mas agora sou um colaborador oficial deste blog! :) Obrigado Miguel!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19831061-115802139943583633?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.joelonsoftware.com/items/2006/08/01.html' title='Funções inline'/><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/115802139943583633/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=115802139943583633' title='3 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/115802139943583633'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/115802139943583633'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2006/09/funes-inline.html' title='Funções inline'/><author><name>Leonardo Garcia</name><uri>http://www.blogger.com/profile/08772967219176422013</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-115755214448186454</id><published>2006-09-06T11:15:00.000-03:00</published><updated>2006-09-06T11:15:45.003-03:00</updated><title type='text'>Mais um artigo do Joel</title><content type='html'>Sim, sim, eu sei...não estou com tempo pra escrever.&lt;br&gt;&lt;br&gt;E olha que eu tenho alguns temas em mente: cluster em linux, heatbeat, linguagens de programação.&lt;br&gt;Enfim...quem sabe no feriado&lt;br&gt;&lt;br&gt;Enquanto isso, leiam este artigo&amp;nbsp; do Joel Spolsky sobre como se  &lt;a href="http://www.joelonsoftware.com/articles/FindingGreatDevelopers.html"&gt;encontrar bons desenvolvedores para contratação.&lt;br clear="all"&gt;&lt;/a&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19831061-115755214448186454?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/115755214448186454/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=115755214448186454' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/115755214448186454'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/115755214448186454'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2006/09/mais-um-artigo-do-joel.html' title='Mais um artigo do Joel'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-115644246777873490</id><published>2006-08-24T14:59:00.000-03:00</published><updated>2006-08-24T15:01:29.290-03:00</updated><title type='text'>Minority Report</title><content type='html'>Cool !

&lt;object height="350" width="425"&gt;
&lt;param name="movie" value="http://www.youtube.com/v/nfVnwdda9Pw"&gt;
&lt;embed src="http://www.youtube.com/v/nfVnwdda9Pw" type="application/x-shockwave-flash" height="350" width="425"&gt;&lt;/embed&gt;
&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19831061-115644246777873490?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/115644246777873490/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=115644246777873490' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/115644246777873490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/115644246777873490'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2006/08/minority-report.html' title='Minority Report'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-115581863191498130</id><published>2006-08-17T09:43:00.000-03:00</published><updated>2006-08-17T09:46:39.413-03:00</updated><title type='text'>[Leonardo Garcia] Redes e o futuro da computação</title><content type='html'>&lt;p class="mobile-post"&gt;Por Leonardo Garcia&lt;/p&gt;&lt;p class="mobile-post"&gt;Sou usuário da Internet desde os idos de 1995, se não me engano. Antes
disso, ainda, existiam também as BBSs (pequenas redes comunitárias que
conectavam poucos computadores através de linha telefônica). Naquela
época, a Internet ainda era incipiente no Brasil, bem pequena e estava
em testes para o público em geral. Mesmo assim, o mundo que se abria
lentamente através dos primeiros sites web (sim, naquela época a web
era minúscula e usávamos o Mosaic, o primeiro navegador, e, depois, o
Netscape 1.0 para acessá-la!), dos e-mails, dos newsgroups (que
acabaram praticamente desaparecendo com as listas de distribuição por
e-mail) e do Gopher (este, coitado, foi praticamente extinto pelo
web... nem sei se ainda existem sites Gopher...). Fui um usuário de
teste do primeiro provedor do interior de Minas Gerais, se não me
engano.&lt;/p&gt;&lt;p class="mobile-post"&gt;Nesta época, a minha velocidade de conexão eram incríveis 4800 bps,
isto porque eu tinha um computador com o modem comercial mais rápido
existente na época. Alias, não era simplesmente um modem. Era um
fax/modem, que também passava fax do computador a incrívies 9600 bps!
Hoje em dia os  modems de linha discada também enviam e recebem faxes,
mas esta funcionalidade quase perdeu sentido numa era de e-mails com
vídeos e voz.&lt;/p&gt;&lt;p class="mobile-post"&gt;Não dava pra ver quase nada a esta velocidade, até porque a qualidade
da infra-estrutura de Internet era muito ruim no Brasil ainda. Pelo
menos esta era a percepção de usuário que eu tinha.&lt;/p&gt;&lt;p class="mobile-post"&gt;O tempo foi passando e as minhas velocidade de conexão foram
aumentado: 14400 bps, 33600 bps, 56 kbps... mas sempre através de
linha discada.&lt;/p&gt;&lt;p class="mobile-post"&gt;Depois disso passei a conviver com redes maiores. Na Unicamp, por
exemplo, eram comuns redes Ethernet ou de cabo coaxial (estas nem
existem mais praticamente...). As coaxiais, sinceramente, não sei qual
era a velocidade delas, mas acho que o máximo era 10 Mbps. As
Ethernets que eu usei tinham 10 Mbps ou 100 Mbps. Como a universidade
tinha um bom acesso aos troncos de infra-estrutura de Internet no
Brasil, a velocidade de conexão lá era muito boa. Algumas vezes, é
verdade, tínhamos problema de velocidade, mas quase sempre por
problemas de configuração da rede do que por problemas de banda
disponível.&lt;/p&gt;&lt;p class="mobile-post"&gt;Quando comecei a trabalhar, eram comuns links de 256 kbps em empresas
pequenas, seja por ADSL ou por microondas.&lt;/p&gt;&lt;p class="mobile-post"&gt;Hoje já estamos em um patamar acima deste: eu, por exemplo, uso acesso
à Internet através do cabo da TV à cabo e tenho conexões que podem
chegar a 2 Mbps na minha casa! Isso é cerca de 500 vezes mais rápido
que o meu primeiro acesso à Internet!&lt;/p&gt;&lt;p class="mobile-post"&gt;Em dez anos, um crescimento de 500 vezes é impressionante. Mas o
crescimento não pára por ai. Hoje, por exemplo, muitos lugares já
possuem redes internas de fibra-óptica, com velocidades de conexão
interna da rede muito superiores a 1 Gbps. As universidades
brasileiras já tem acesso à chamada Internet 2, uma versão paralela da
Internet que se comunica com a Internet "comum" só que através de
velocidades muito maiores que aquelas às quais os usuários comuns
estão acostumados.&lt;/p&gt;&lt;p class="mobile-post"&gt;Mas, para onde vamos daqui pra frente? Existe motivo para crescer mais
ainda a banda de conexão disponível?&lt;/p&gt;&lt;p class="mobile-post"&gt;Eu particularmente acho que sim. Se, hoje em dia, não conseguimos
imaginar aplicações para redes de 100 Gbps, por exemplo, é porque,
dentre outras coisas, não temos esta banda disponível. Tenho certeza
que assim que estas velocidades estiverem disponíveis serão criadas
aplicações para ocupá-las.&lt;/p&gt;&lt;p class="mobile-post"&gt;Neste sentido, temos um projeto muito interessante sendo desenvolvido
no Brasil: o projeto TIDIA, da Fapesp (Fundação de Amaparo à Pesquisa
do Estado de São Paulo, a maior fundação deste tipo no Brasil). O
projeto TIDIA se propõe a algumas coisas, dentre elas, criar
infra-estrutura de rede de computadores ultra-rápidas e aplicações que
façam uso desta infra-estrutura super poderosa para educação a
distância. Não sei como o projeto está hoje, mas lembro-me de ter lido
que uma das coisas a serem desenvolvidas neste projeto era uma placa
de rede óptica capaz de transmitir dados entre computadores a até 400
Gbps!!! Velocidade para ninguem botar defeito!&lt;/p&gt;&lt;p class="mobile-post"&gt;Saindo do laboratório e indo para a vida real, várias empresas já
estão lançando servidores que suportam as redes com arquitetura
InfiniBand. Não sei maiores detalhes a respeito desta rede, mas elas
podem chegar a 96 Gbps!&lt;/p&gt;&lt;p class="mobile-post"&gt;Viajando um pouco mais nesta idéia de redes ultra-rápidas, há algum
tempo atrás li um artigo sobre fotón-gêmeos. Fótons-gêmeos são
partículas físicas que possuem características muito especiais. Vou
tentar explicar a propriedade especial que estes fótons-gêmeos possuem
e que, na minha cabeça, poderiam produzir velocidades de transmissão
de dados praticamente infinitas.&lt;/p&gt;&lt;p class="mobile-post"&gt;Os físicos descobriram que, se você isolar um fóton (uma particula de
luz, como as geradas por uma lâmpada acesa), e conseguir fazer este
fóton atravessar um prisma com propriedades especiais, do outro lado
do prisma sairão dois fótons. O interessante, neste caso, é que estes
dois fótons foram originados de um único fóton original e, como tudo
na natureza, eles buscam o equilíbrio de forças entre si. Em outras
palavras, se você executa uma ação sobre um dos fótons (por exemplo,
colocando-o para girar no sentido horário), o outro fóton executará a
mesma ação no sentido contrário, sem que nada aja diretamente sobre
ele (no nosso exemplo, ele giraria no sentido anti-horário).
Obviamente isto é uma simplificação grotesca do que realmente
acontece, mas é suficiente para tentar explicar o que vem em seguida.
Imaginando que poderiamos, num computador servidor, produzir um fóton,
isolá-lo, passá-lo por um prisma para termos dois fótons-gêmeos e que
conseguíssemos "trancar" um destes fótons no servidor e enviar o outro
fóton-gêmeo através de fibra óptica a um outro computador cliente,
onde este outro fóton seria trancado também. Imaginando também que
poderíamos fazer isto não só com um fóton, mas com centenas de milhões
de fótons, podemos pensar que, para transmitirmos dados entre os
computadores, precisaríamos apenas alterar as propriedades dos fótons
no servidor e estas propriedades seriam modificadas instantaneamente
nos fótons-gêmeos do computador cliente. Ou seja, a velocidade de
transmissão de dados, neste caso, seria tão grande quanto fosse nossa
capacidade de ler as propriedades físicas dos fótons alteradas!&lt;/p&gt;&lt;p class="mobile-post"&gt;Na prática, isto poderia nos levar a redes de computadores com
velocidades extremamente grandes, não sei nem dizer de qual ordem de
grandeza.&lt;/p&gt;&lt;p class="mobile-post"&gt;Para finalizar, só tenho a dizer que o que eu vi até agora no
desenvolvimento das redes de computadores nos últimos anos e o que vem
sendo dito no mercado de tecnologia me deixa na espectativa e
empolgado com o que deve vir por ai no futuro próximo. Mas, apesar de
todo o avanço, sempre é bom lembrar do que Tanenbaum disse num dos
livros clássicos sobre redes de computadores: "Never underestimate the
bandwith of a station wagon full of [storage] hurtling down the
highway.". Numa tradução livre, algo como "Nunca subestime a banda de
um vagão de trem cheio de fitas com dados em uma estrada.". Isso era
verdade na década de 80 quando esta frase foi escrita provavelmente
pela primeira vez e continua sendo verdade até hoje, afinal, não são
só as infra-estruturas de rede que evoluem, mas também a tecnologia de
storage. Mas isso é uma conversa para outro artigo.&lt;/p&gt;
&lt;span style="font-style: italic;"&gt;[&lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;NDA:&lt;/span&gt;&lt;span style="font-style: italic;"&gt; Leonardo Garcia é Engenheiro de Computação, e foi meu colega de graduação na UNICAMP. Já trabalhou em diversos projetos relacionados a software livre (inclusive já tendo construído sua própria mini distro de linux :-) ) e em diversas empresas e atualmente está no &lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Linux Technology Center&lt;/span&gt;&lt;span style="font-style: italic;"&gt; da &lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt; IBM&lt;/span&gt;&lt;span style="font-style: italic;"&gt; ]&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19831061-115581863191498130?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/115581863191498130/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=115581863191498130' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/115581863191498130'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/115581863191498130'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2006/08/leonardo-garcia-redes-e-o-futuro-da_17.html' title='[Leonardo Garcia] Redes e o futuro da computação'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-115521638747435815</id><published>2006-08-10T10:26:00.000-03:00</published><updated>2006-08-10T10:26:27.533-03:00</updated><title type='text'>Gerenciamento de Equipes</title><content type='html'>Há um bom tempo não publico aqui nenhum texto mais pessoal, com opiniões realmente minhas. Falta de tempo. Preguiça...assumo. Não que eu ache que não publicar minhas idéias seja uma grande perda para o mundo. Mas tendo um blog, me parece algo importante pelo menos para manter as aparências.... &lt;br&gt;&lt;br&gt;Esse preâmbulo não significa que hoje eu vá publicar algo meu. É só para justificar :-) Vou reciclar idéias alheias.&lt;br&gt;&lt;br&gt;Acho que já citei várias vezes textos do Joel Spolsky. Ele é um computeiro que escreve bem, e que sabe vender seu peixe. Coisa não muito fácil de se encontrar hoje em dia. &lt;br&gt;&lt;br&gt;Os três últimos artigos dele (&lt;a href="http://www.joelonsoftware.com/items/2006/08/09.html"&gt;&lt;font size="2"&gt;The Econ 101 Management Method&lt;/font&gt;&lt;/a&gt;, &lt;a href="http://www.joelonsoftware.com/items/2006/08/08.html"&gt;The Command and Control management Method &lt;/a&gt; e &lt;a href="http://www.joelonsoftware.com/items/2006/08/10.html"&gt;The identity Method&lt;/a&gt;) falam sobre diversas técnicas de gerenciamento de projetos e equipes, e discute como conseguir que uma equipe de pessoas trabalhem para alcançar um mesmo objetivo (no jargão gerencial, que eu acho ridículo, o termo seria alinhamento). São fáceis e agradáveis de serem lidos, e passam bem claramente as idéias. &lt;br&gt;&lt;br&gt;Aproveito para citar um caso de problema de comunicação intrínseco de computeiros. Ontem fui à minha incursão semanal à FNAC, e acabei dando uma passada na sessão de livros de informática. Dei uma folheada num livro sobre Ruby, escrito por um brasileiro, e devo dizer que raramente vi algo tão mal escrito. O ponto culminante do texto foi na frase onde ele dizia que a linguagem Ruby é menos verbosa que outras (ou algo do gênero)..guardei o livro e fui ao cinema &lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19831061-115521638747435815?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/115521638747435815/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=115521638747435815' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/115521638747435815'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/115521638747435815'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2006/08/gerenciamento-de-equipes.html' title='Gerenciamento de Equipes'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-115503708183417729</id><published>2006-08-08T08:38:00.000-03:00</published><updated>2006-08-08T08:38:01.883-03:00</updated><title type='text'>[Mac OS X] NeoOfficeJ</title><content type='html'>Quem já tentou baixar o OpenOffice para Mac&lt;span style="font-weight: bold;"&gt; OS X&lt;/span&gt; sabe que o porte atual só funciona rodando sobre X11. Por algum motivo que me escapa, não existem planos pelo pessoal do OpenOffice de portar para um ambiente nativo Mac. Mas existe o projeto NeoOfficeJ que fez este trabalho. Estou usando a versão  2.0 Beta, que executa bem tarefas simples de edição de arquivos de texto e planilhas tanto no formato MS Office quanto nos formatos XML. Como não sou heavy user de pacote Office, isso já resolve meus problemas. Em breve irão lançar uma versão totalmente Aqua. Acho que vale a pena conferir. &lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19831061-115503708183417729?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/115503708183417729/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=115503708183417729' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/115503708183417729'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/115503708183417729'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2006/08/mac-os-x-neoofficej.html' title='[Mac OS X] NeoOfficeJ'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-115452643853093403</id><published>2006-08-02T10:42:00.000-03:00</published><updated>2006-08-02T10:47:18.550-03:00</updated><title type='text'>Google Papers</title><content type='html'>Hoje, lendo meus RSSs, descobri a página Google Papers, que contém links para artigos escritos por pesquisadores e engenheiros que trabalham lá. Ainda não tive tempo de ler com calma os artigos (mesmo porque são muitos), mas tenho a impressão de que pode ser uma fonte interessante de informações.

&lt;a href="http://labs.google.com/papers/"&gt;http://labs.google.com/papers/&lt;/a&gt;

Comentários específicos sobre papers e indicações são bem vindos.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19831061-115452643853093403?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/115452643853093403/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=115452643853093403' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/115452643853093403'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/115452643853093403'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2006/08/google-papers.html' title='Google Papers'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-115348511448475207</id><published>2006-07-21T09:31:00.000-03:00</published><updated>2006-07-21T09:31:54.536-03:00</updated><title type='text'>Java X Ruby</title><content type='html'>Eu nunca programei em Ruby. Mas tenho ouvido falar muito,&amp;nbsp; muito bem, desta linguagem. E sobretudo tenho ouvido falar muito bem do Ruby&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;On&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;Rails. Mas como não se pode fazer tudo ao mesmo tempo, acabei optando por inicialmente aprender Python. Anyway, é sempre bom estar acompanhando o que se passa no mundo das outras linguagens. O artigo  &lt;a href="http://www.javaworld.com/javaworld/jw-07-2006/jw-0717-ruby.html"&gt;&amp;quot;Ruby for the Java world&amp;quot;&lt;/a&gt;   é um artigo bem interessante que faz uma comparação entre Ruby e &lt;span style="font-weight: bold;"&gt;Java&lt;/span&gt;  (e interessante para programadores java como eu) e apresenta a ferramenta JRuby que permite que uma use recursos da outra e vice-versa.&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19831061-115348511448475207?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/115348511448475207/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=115348511448475207' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/115348511448475207'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/115348511448475207'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2006/07/java-x-ruby.html' title='Java X Ruby'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-115322518080990072</id><published>2006-07-18T09:05:00.000-03:00</published><updated>2006-07-18T09:23:04.933-03:00</updated><title type='text'>[Web] Web standards</title><content type='html'>Em vários outros posts anteriores, eu comentei sobre a dificuldade de se desenvolver aplicativos web em CSS, Javascript e HTML que fossem totalmente compatíveis com todos os navegadores disponíveis.

Realmente, esta tarefa requer bastante paciência e eu até entendo que desenvolvedores mais preguiçosos ou com deadlines mais apertados e com clientes bem segmentados resolvam focar seu desenvolvimento para apenas um navegador (em geral, para minha infelicidade, IE).

Atualmente existe alguns movimentos que visam a adoção de padrões por esses navegadores, para melhorar a vida de todos. Um deles é o projeto &lt;a href="http://www.webstandards.org/"&gt;Webstandards&lt;/a&gt;. No site deles, existe um teste que analisa a compatibilidade do seu navegador com os padrões standards. O teste (que pode ser executado &lt;a href="http://www.webstandards.org/files/acid2/test.html"&gt;aqui&lt;/a&gt;) consiste numa página que usa somente CSS e DIVs para desenhar uma carinha. É possível ver o resultado gerado pelo seu navegador e o resultado esperado. Para efeito de comparação, seguem abaixo os resultados obtidos. Bastante ilustrativo.

Como deveria ser (uma carinha feliz):

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/5614/1970/1600/como_deveria_ser.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/5614/1970/320/como_deveria_ser.png" alt="" border="0" /&gt;&lt;/a&gt;
Como é no Firefox (carinha tomou um LSD no dia anterior):

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/5614/1970/1600/como_eh_firefox.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/5614/1970/320/como_eh_firefox.png" alt="" border="0" /&gt;&lt;/a&gt;
Como é no IE (carinha passou por uma rebelião do PCC):&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/5614/1970/1600/como_eh_ie.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/5614/1970/320/como_eh_ie.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19831061-115322518080990072?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/115322518080990072/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=115322518080990072' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/115322518080990072'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/115322518080990072'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2006/07/web-web-standards.html' title='[Web] Web standards'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-115089503496818595</id><published>2006-06-21T10:03:00.000-03:00</published><updated>2006-06-21T10:03:55.010-03:00</updated><title type='text'>[Leonardo Garcia] Java e Linux</title><content type='html'>&lt;div dir="ltr" lang="pt-BR"&gt;&lt;font size="2"&gt;Por Leonardo Garcia&lt;br&gt;&lt;br&gt;Uma das coisas mais interessantes que eu já presenciei é a diferença de percepção existente entre os desenvolvedores Java em geral e as pessoas da comunidade Linux.&lt;/font&gt;&lt;font size="2"&gt;  Nos últimos dois anos eu participei de vários eventos da tecnologia Java no Brasil. Dentre eles, os mais importantes com certeza foram os dois Sun Tech Days. Para aqueles que não conhecem, o Sun Tech Days é o maior evento de Java no Brasil. Ele é organizado pela Sun Microsystems Inc. e também acontece em outros países. Estes eventos seriam os segundos mais importantes depois do Java One, maior evento de Java do mundo que acontece anualmente em San Fracisco.&lt;/font&gt;    &lt;p style="margin-bottom: 0in;"&gt;&lt;font size="2"&gt;Nestes eventos sobre Java, é muito interessante a forma como a grande maioria dos desenvolvedores tem uma atitude de repúdio com o Windows, a tecnologia .NET e outras coisas  vindas da Microsoft. Este tipo de comportamento é de certa forma normal em vários grupos de pessoas envolvidas com tecnologia. Até aí não vejo nada demais. A Microsoft mexe com o âmago de muitas pessoas, seja lá em qual sentido isto acontece. Obviamente, este tipo de comportamento é seguido pela defesa de tecnologias livres, aí incluindo, é claro, o sistema operacional Linux. Isto é ainda mais exacerbado pelo recente movimento da própria Sun na abertura do código-fonte de vários de seus produtos, inclusive o sistema operacional Solaris e da IDE de desenvolvimento NetBeans.&lt;/font&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0in;"&gt;&lt;font size="2"&gt;Neste ponto chego ao ponto interessante que comentei no inicio deste artigo. Ao mesmo tempo em que muitas pessoas envolvidas com Java no Brasil são a favor do software livre e do Linux, boa parte das pessoas da comunidade que eu já conheci não gostam da tecnologia Java. Existem, obviamente, vários motivos para este tipo de comportamento da pessoas da comunidade. Muitos não vêem com bons olhos as iniciativas de software livre da própria Sun devido às restrições das licenças da Sun. Especificamente em relação a Java, as licenças da maquina virtual Java e do SDK não são licenças de software livres. Os softwares são distribuídos gratuitamente e sua especificação é desenvolvida através do Java Community Process (JCP), que é um processo aberto a toda a comunidade para desenvolvimento das especificações de tecnologias relativas ao Java. No entanto, a implementação da Sun da máquina virtual Java e do seu SDK não possuem o código-fonte aberto, ainda.&lt;/font&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0in;"&gt;&lt;font size="2"&gt;Digo ainda porque existe uma certa boa vontade da Sun em liberalizar um pouco algumas questões relativas à licença do Java. Acho que ainda estamos um pouco longe de termos o código-fonte do Java SE da Sun liberados para a comunidade de software livre, mas no último Java One um dos principais assuntos foi a flexibilização da licença Java para que a implementação de Java SE da Sun possa, por exemplo, ser distribuída sem grandes problemas em distribuições Linux.&lt;/font&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0in;"&gt;&lt;font size="2"&gt;Apesar desta aparente boa vontade, posso estar enganado, mas as notícias mais recentes que tenho é que as distribuições Linux que antes estavam vendo com bons olhos a iniciativa da Sun para mudança da licença do Java agora estão com um pé atrás novamente. Isto porque as mudanças feitas na licença aparentemente não foram suficientes para que o Java possa ser disponibilizado juntamente com os outros pacotes de instalação das distribuições.&lt;/font&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0in;"&gt;&lt;font size="2"&gt;Esta questão legal, que é importante por um lado, acaba afetando diretamente os usuários finais que tem várias dificuldades para instalar o ambiente Java em Linux e utilizar este ambiente, por exemplo, dentro de seu navegador para acessar a um Internet Banking ou outra aplicação baseada em Java. Este tipo de dificuldade prática causada pelos problemas de licença acaba pesando muito na visão da comunidade de software livre sobre a tecnologia Java.&lt;/font&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0in;"&gt;&lt;font size="2"&gt;Não sei até que ponto este tipo de comportamento entre as pessoas envolvidas com a tecnologia Java e com a comunidade de software livre acontece em outras partes do mundo. No entanto, é interessante por si só verificar este tipo de relação no Brasil porque o Brasil é de longe o país com a maior comunidade de usuários Java do mundo e um dos mais ativos participantes em projetos de software livre também.&lt;/font&gt;&lt;/p&gt; &lt;/div&gt;&lt;br clear="all"&gt;&lt;span style="font-style: italic;"&gt;[&lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;NDA:&lt;/span&gt;&lt;span style="font-style: italic;"&gt; Leonardo Garcia é Engenheiro de Computação, e foi meu colega de graduação na UNICAMP. Já trabalhou em diversos projetos relacionados a software livre (inclusive já tendo construído sua própria mini distro de linux :-) ) e em diversas empresas e atualmente está no &lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Linux Technology Center&lt;/span&gt;&lt;span style="font-style: italic;"&gt; da &lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt; IBM&lt;/span&gt;&lt;span style="font-style: italic;"&gt; ]&lt;/span&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19831061-115089503496818595?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/115089503496818595/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=115089503496818595' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/115089503496818595'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/115089503496818595'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2006/06/leonardo-garcia-java-e-linux.html' title='[Leonardo Garcia] Java e Linux'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-115072775882338541</id><published>2006-06-19T11:35:00.000-03:00</published><updated>2006-06-19T11:35:59.416-03:00</updated><title type='text'>[Curiosidade] RAU-TU Madame Myrna</title><content type='html'>O &lt;a href="http://rau-tu.univates.br/"&gt;Rau-Tu&lt;/a&gt;  é um sistema de perguntas e respostas desenvolvido pela UNIVATES. O sistema e dividido em tópicos (Linguagens de programação, OS, Rede, Sistemas de Edição, etc...), e cada tópico tem uma lista de&amp;nbsp; colaboradores cadastrados. Qualquer pessoa pode enviar um email com pergunta, que será respondida por algum colaborador disponível. Para manter a qualidade do sistema, a pessoa que envia a pergunta e recebe alguma resposta pode dar notas para as respostas. Os visitantes podem também pesquisar as perguntas enviadas por outras pessoas que já obtiveram resposta, para pesquisa rápida. &lt;br&gt;&lt;br&gt;Funciona bem !&lt;br&gt;&lt;br&gt;E hoje eu descobri que o sistema está se diversificando...&lt;br&gt;&lt;br&gt;O nome: Rau-Tu Madame Myrna.&lt;br&gt;&lt;br&gt;A descrição: &lt;span style="font-style: italic;"&gt;&amp;quot;&lt;/span&gt;&lt;font style="font-style: italic;" size="1"&gt; O RAU-TU Sentimental da Madame Myrna é uma homenagem da equipe de software livre da Univates ao grande escritor brasileiro Nelson Rodrigues (link: &lt;a href="http://www.nilc.icmsc.sc.usp.br/literatura/nelsonrodrigues.htm"&gt;http://www.nilc.icmsc.sc.usp.br/literatura/nelsonrodrigues.htm&lt;/a&gt;), que nos anos 40 respondia no &amp;quot;Diário da Noite&amp;quot;, do Rio de Janeiro, sob o pseudônimo de Myrna às dúvidas sentimentais de seus leitores e leitoras. O livro &amp;quot;Não se pode amar e ser feliz ao mesmo tempo&amp;quot;, editado pela Companhia das Letras, reúne as melhores respostas de Myrna a seus leitores. Recomendamos a compra do mesmo e ficaremos extremamente felizes se alguma destas livrarias &amp;quot;online&amp;quot; quiser colocar um banner aqui e patrocinar o contínuo desenvolvimento de software livre pela equipe da UNIVATES. Este RAU-TU Sentimental da Madame Myrna foi criado com o intuito de provar que o sistema RAU-TU pode ser usado para as mais diversas finalidades, que envolvam a criação de uma base de conhecimento, facilitando o encontro de pessoas que colaboram umas com as outras, com o intuito de aprender mais ou se divertir.&lt;/font&gt;&lt;span style="font-style: italic;"&gt;&amp;quot;&lt;br&gt;&lt;/span&gt;&lt;br&gt;O endereço: &lt;a href="http://rau-tu.univates.br/madame_myrna/"&gt;http://rau-tu.univates.br/madame_myrna/&lt;/a&gt;&lt;br&gt;&lt;br&gt;:-) &lt;br&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19831061-115072775882338541?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/115072775882338541/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=115072775882338541' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/115072775882338541'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/115072775882338541'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2006/06/curiosidade-rau-tu-madame-myrna.html' title='[Curiosidade] RAU-TU Madame Myrna'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-115028784743056550</id><published>2006-06-14T09:24:00.000-03:00</published><updated>2006-06-21T10:05:07.076-03:00</updated><title type='text'>[Leonardo Garcia] Software livre e processos de qualidade de software</title><content type='html'>&lt;div text="#000000" dir="ltr" lang="en-US"&gt;Por &lt;span style="font-weight: bold;"&gt;Leonardo Garcia&lt;/span&gt;
&lt;p style="margin-bottom: 0in;" align="justify" lang="pt-BR"&gt; A idéia deste post surgiu das duas reclamações que o Miguel já fez neste blog a respeito da falta de documentação em projetos de Software Livre (uma destas reclamações está &lt;a href="http://log4dev.blogspot.com/2006/05/comunidades-software-livre.html" target="_blank"&gt;aqui&lt;/a&gt;) e de algumas conversas que tive com ele sobre este assunto baseadas na recente experiência que estou tendo no meu trabalho.&lt;/p&gt;  &lt;p style="margin-bottom: 0in;" align="justify" lang="pt-BR"&gt; Bom, antes de mais nada, concordo com o Miguel de que falta documentação na maior parte dos projetos de software livre que eu já vi. Quer dizer, depende do que nós estamos acostumados a chamar de documentação. O meu referencial de documentação de um projeto vem dos conhecimentos de Engenharia de Software que eu tenho e da vivência com outras Engenharias. Deste ponto de vista, na minha opinião, documentação é tudo aquilo que te ajuda, de alguma forma, a explicar um sistema, como ele funciona, quais são suas funcionalidades e, talvez o mais importante, como usá-lo de uma maneira correta e eficiente, ou seja, para que o sistema serve.&lt;/p&gt;  &lt;p style="margin-bottom: 0in;" align="justify" lang="pt-BR"&gt; Acho que a grande falha neste sentido para muitos projetos de software livre está no fato de que muitas pessoas da comunidade acreditam que a documentação é o código-fonte, afinal, que melhor maneira haveria para obter informações a respeito de um sistema do que simplesmente poder ver como o sistema funciona nos mínimos detalhes? A falha neste pensamento, comparado ao que eu disse no parágrafo anterior, está na palavra "ajuda". A documentação deveria ajudar a entender o sistema e olhar o código fonte nem sempre ajuda muito no início. Em sistemas grandes como o Eclipse, pode-se demorar uma semana ou mais para se pegar o "jeito" e conseguir, a partir de então, obter informações relevantes do sistema a partir do código-fonte. Em projetos grandes, uma semana pode não ser muito tempo, mas isto inibe, por exemplo, que uma pessoa que nunca tenha feito um plugin para Eclipse se aventure a fazer um plugin que lhe pareça útil... simplesmente porque o tempo que ela vai gastar para entender a arquitetura do sistema lhe dá apenas duas opções: ou ela vai utilizar uma parte do seu tempo livre para entender o funcionamento do sistema ou vai se virar sem a funcionalidade que ela queria implementar e, provavelmente, distribuir gratuitamente para uso-fruto do resto da comunidade.&lt;/p&gt;  &lt;p style="margin-bottom: 0in;" align="justify" lang="pt-BR"&gt; Outra questão importante é: se há documentação, muitas vezes ela não é de fácil acesso. É muito comum os sites que hospedam projetos de software livres terem estruturas complicadas, pouco amigáveis. Apesar de eu achar este um detalhe menor, é importante citá-lo também, pois isso leva com que pessoas que trabalham com software livre se comportem de uma maneira diferente de pessoas que, por exemplo, trabalham com software proprietário.&lt;/p&gt;  &lt;p style="margin-bottom: 0in;" align="justify" lang="pt-BR"&gt; Quando eu programava em tecnologias proprietárias, minha maior fonte de referência não era o Google. Era muito mais fácil achar referências e soluções para meus problemas na própria documentação gerada pela empresa desenvolvedora do sistema. Tive esta experiência, por exemplo, com Visual Basic 6. Não quero aqui discutir as virtudes ou não desta linguagem e muito menos as virtudes ou não da Microsoft (isto dariam vários outros posts e este já vai ficar grande o suficiente). No entanto, a Microsoft fornece uma documentação muito completa, rica em exemplos e de fácil navegação e busca. Simplesmente isto fazia com que eu dificilmente recorresse a sites específicos a respeito de VB6, ou a fóruns ou ao próprio Oráculo, digo, Google. Isto também faz com que VB6 seja, ainda hoje, uma das linguagens mais conhecidas e mais utilizadas no desenvolvimento de sistemas, mesmo com todas as suas limitações e com o fim de suporte oficial da Microsoft à linguagem.&lt;/p&gt;  &lt;p style="margin-bottom: 0in;" align="justify" lang="pt-BR"&gt; Em compensação, todas as vezes que eu trabalho com software livre, "Google is my friend!". Gosto das listas de discussão também, mas acho que elas são mais complicadas  de serem utilizadas, pois existe toda uma etiqueta para participação de listas, o que inclui a leitura dos FAQs e perguntas antigas das listas, o que geralmente eu não tenho muita paciência para fazer. De qualquer forma, poderíamos dizer que neste caso a documentação não está escrita formalmente. Se ela existe, é difusa e esta mal catalogada (por melhor que o Google seja, ele não pode ser utilizado como catálogo de nada, até porque o objetivo dele não é este, por enquanto). Isto, na minha opinião, acaba inibindo alguns novos desenvolvedores a experimentarem o software livre. A filosofia de que a documentação é o código-fonte, para estas pessoas, não funciona.&lt;/p&gt;  &lt;p style="margin-bottom: 0in;" align="justify" lang="pt-BR"&gt; Os mais puristas em relação ao modelo de desenvolvimento do software livre poderão pensar que eu estou exagerando, e talvez esteja mesmo. Mas eu queria chamar atenção para o fato de que talvez um processo mais elaborado de geração de documentação poderia fazer com que projetos de software livre fossem mais bem vistos por desenvolvedores de uma forma geral e pelas corporações também (afinal, hoje grandes empresas também têm papel decisivo no desenvolvimento de projetos de software livre).&lt;/p&gt;  &lt;p style="margin-bottom: 0in;" align="justify" lang="pt-BR"&gt; Não estou dizendo também que se deva adotar um processo formal de qualidade de software no desenvolvimento de software livre. Este esquema, na minha opinião, não funciona com o modelo de desenvolvimento criado pelas comunidades de software livre. Um processo exagerado de documentação certamente desmotivaria os colaboradores dos projetos livres, mas alguns controles, como os criados, por exemplo, pelo &lt;a href="http://www.gforge.com/" target="_blank"&gt;Gforge&lt;/a&gt;, poderiam ser interessantes. Isto sem levar em conta alguns argumentos interessantes da comunidade de software livre para a ausência total de documentação nos projetos de software livre. Algumas que eu acho interessante e faço questão de comentar:&lt;/p&gt;  &lt;p style="margin-bottom: 0in;" align="justify" lang="pt-BR"&gt;  - Software de qualidade não necessariamente é feito com processos de qualidade e nem todo software feito com processo de qualidade tem qualidade. Isto é uma verdade indiscutível.&lt;/p&gt; &lt;p style="margin-bottom: 0in;" align="justify" lang="pt-BR"&gt;  - Processos de qualidade de software como o CMMI focam boa parte do trabalho na definição dos processos pois se a empresa ou o grupo de desenvolvimento tiverem os processos bem definidos, isto significa que, teoricamente, a saída de uma pessoa do grupo e a sua substituição por outra pessoa não deveria interferir na qualidade do software produzido. Isto faz com que as pessoas sejam transformadas em meros recursos, o que, definitivamente, não é a idéia das comunidades de desenvolvedores de software livre, onde os desenvolvedores são os principais atores.&lt;/p&gt; &lt;p style="margin-bottom: 0in;" align="justify" lang="pt-BR"&gt;  - Espera-se que a comunidade de software livre tenha colaboradores bons. E uma pessoa que não seja boa o suficiente para ler um código-fonte e entendê-lo não agregará nenhum valor ao movimento. Isto, na minha opinião, é uma verdade pela metade. Uma das grandes batalhas de um dos principais representantes do mundo de software livre, o Linux, é que ele seja um sistema operacional mais aceito e utilizado mundialmente. E, para que isto aconteça, é necessário, antes de mais nada, que o sistema seja fácil de usar e seja entendido por pessoas que não fazem nem idéia do que seja um código-fonte. Qual é a melhor maneira de se fazer entender neste caso? Eu acho que uma boa documentação poderia ajudar bastante nesta hora.&lt;/p&gt; &lt;p style="margin-bottom: 0in;" align="justify" lang="pt-BR"&gt;  - Na comunidade de software livre, boa parte dos problemas que seriam resolvidos com processos de qualidade de software são resolvidos pelo mantenedor do projeto. Sem dúvida nenhuma, o mantenedor é uma figura crucial em projetos de software livre e ele é o responsável, como o próprio nome diz, pelo bom andamento do projeto. Dizer que o processo de desenvolvimento de software livre não possui nenhum processo formal de qualidade pode até ser verdade, mas isso não significa que o mantenedor e seus colaboradores não tenham que definir funcionalidades, recursos, estimar tempo de desenvolvimento e definir milestones e releases do produto. Tudo isto também acontece com software livre.&lt;/p&gt;  &lt;p style="margin-bottom: 0in;" align="justify" lang="pt-BR"&gt;
&lt;/p&gt;&lt;p style="margin-bottom: 0in;" align="justify" lang="pt-BR"&gt; Em suma, acho que o que talvez falte para o software livre seja pegar algumas poucas idéias dos processos complexos de qualidade de software e tentar aplicar estas idéias de uma forma apropriada à sua realidade. Sei que cada projeto é um caso diferente e que as regras não seriam universais, mas alguns conceitos poderiam ser usados para tentar ajudar a vida não só dos desenvolvedores, mas também dos usuários comuns que queiram propagar a filosofia de ser livre.&lt;/p&gt;
&lt;p style="margin-bottom: 0in;" align="justify" lang="pt-BR"&gt;&lt;span style="font-style: italic;"&gt;[&lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;NDA:&lt;/span&gt;&lt;span style="font-style: italic;"&gt;   Leonardo Garcia é Engenheiro de Computação, e foi meu colega de graduação na UNICAMP. Já trabalhou em diversos projetos relacionados a software livre (inclusive já tendo construído sua própria mini distro de linux :-) ) e em diversas empresas e atualmente está no  &lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Linux Technology Center&lt;/span&gt;&lt;span style="font-style: italic;"&gt; da &lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;IBM&lt;/span&gt;&lt;span style="font-style: italic;"&gt; ]&lt;/span&gt;
&lt;/p&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19831061-115028784743056550?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/115028784743056550/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=115028784743056550' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/115028784743056550'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/115028784743056550'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2006/06/leonardo-garcia-software-livre-e.html' title='[Leonardo Garcia] Software livre e processos de qualidade de software'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-115016871660999907</id><published>2006-06-13T00:18:00.000-03:00</published><updated>2006-06-13T00:18:36.676-03:00</updated><title type='text'>[Python] Primeiras impressões</title><content type='html'>Bom, lendo meus últimos artigos, dá pra perceber que ultimamente andei brincando com &lt;span style="font-weight: bold;"&gt;Python&lt;/span&gt;. Fazia algum tempo que queria aprender esta linguagem, mas sempre rolava aquela preguiça básica. Há 3 semanas atrás tomei coragem, e comecei a programar.  &lt;br&gt;&lt;br&gt;Os motivos que me fizeram ficar interessado foram vários. Ouvi pela primeira vez falar de Python quando trabalhava no projeto &lt;span style="font-weight: bold;"&gt;AURORA&lt;/span&gt;, no CenPRA. Na época, a definição que me deram era que Python era uma ótima linguagem para integração de sistemas: uma espécie de cola. Depois li vários artigos que elogiavam a linguagem pela  &lt;span style="font-weight: bold;"&gt;limpeza sintática&lt;/span&gt; e pela &lt;span style="font-weight: bold;"&gt;facilidade e velocidade de desenvolvimento de código&lt;/span&gt;. Além do mais, eu frequentemente preciso escrever alguns scripts para execução de tarefas cotidianas: a solução adotadas por outros desenvolvedores que trabalham comigo é Perl, que apesar de ser altamente poderosa, eu tenho sérios bloqueios com a sintaxe. No final, acabava optando por Java que pra pequenas tarefas cotidianas não é a mais adequada em geral, apesar de ser minha linguagem preferida e na qual tenho maior fluência. O argumento derradeiro foi saber que o  &lt;span style="font-weight: bold;"&gt;Google&lt;/span&gt; utiliza muito &lt;span style="font-weight: bold;"&gt;Python&lt;/span&gt;...&lt;br&gt;&lt;br&gt;O fato é que acabei começando a aprender, e devo dizer que gostei. A estratégia de aprendizagem foi simples: comecei programando algoritmos básicos de computação (merge &lt;span style="font-weight: bold;"&gt; &lt;/span&gt;sort, quicksort, selection&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;sort, heap&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;sort, &lt;span style="font-weight: bold;"&gt;lista ligada&lt;/span&gt;, fibonacci, fatorial), para exercitar comandos básicos da linguagem como recursão, chamada de funções, if-then-else, loops, declaracão de variáveis, manipulação de listas, dicionário, tuplas e outras estruturas de dados. Depois, comecei a usar Python para escrever scripts &amp;quot;real life&amp;quot;, ou seja, scripts que tinham alguma funcionalidade no meu dia a dia. Veio a calhar pois atualmente estou processando algumas dezenas de milhares de arquivos contendo dados genéticos, e preciso executar operações como leitura e escrita de arquivos, análise de textos utilizando expressões regulares e geração de relatórios simples. &lt;br&gt;&lt;br&gt;Não sou expert na linguagem ainda. Longe disso. Apenas escrevi algumas centenas de linhas de código, e não utilizei todos os recursos disponíveis (como orientação a objeto), portanto as impressões que colocarei aqui são apenas preliminares... &lt;br&gt;&lt;br&gt;De fato a linguagem é bem limpa sintaticamente, e bem &lt;span style="font-weight: bold;"&gt;fácil de escrever&lt;/span&gt;. A questão do uso de indentação para &lt;span style="font-weight: bold;"&gt;separação dos blocos&lt;/span&gt;, que é o motivo principal de reclamação das pessoas que não gostam de Python, não chega&amp;nbsp; a ser um problema quando se tem um editor apropriado (no meu caso estou usando Emacs &lt;span style="font-weight: bold;"&gt; com &lt;/span&gt;Python&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;Mode): o efeito colateral é que&amp;nbsp; o código é naturalmente&amp;nbsp; organizado e fácil de ler. A documentação, centralizada no site &lt;span style="font-weight: bold;"&gt; &lt;a href="http://www.python.org"&gt;www.python.org&lt;/a&gt;&lt;/span&gt;,&amp;nbsp; é bem feita, com tutoriais para vários níveis, referencias, livros e mini how-tos, além de listas de discussões bem ativas.&lt;br&gt;&lt;br&gt;As&lt;span style="font-weight: bold;"&gt;  listas, &lt;/span&gt;tuplas&lt;span style="font-weight: bold;"&gt; e dicionários&lt;/span&gt;  (também conhecidos como hashes) são o grande forte da linguagem, que possui funções e recursos sintáticos muito poderosos para manipulação destas. Segundo artigos que li, a implementação de hash de Python é uma das mais eficientes que existe. As  &lt;span style="font-weight: bold;"&gt;variáveis&lt;/span&gt;  em Python são &lt;span style="font-weight: bold;"&gt;dinamicamente tipadas&lt;/span&gt;: não se declara tipo de uma variável, mas uma vez que se atribui um tipo de variável, não se pode atribuir outro tipo de objeto. &lt;br&gt;&lt;br&gt;O processo de IO (leitura e escrita básica de dados em arquivo) é muito simples e eficiente, assim como&amp;nbsp; a implementaçnao de&amp;nbsp; regexp. O modo de uso deste último não é tão direto quanto Perl, e se assemelha muito ao modelo implementado por Java, com patterns e matchers. Não consegui encontrar nenhum artigo comparando a performance das duas linguagens nesse quesito, mas minha experiência atual mostra que não existe uma grande diferença de velocidade...algum dia verifico isso. &lt;br&gt;&lt;br&gt;Um ponto que eu não gostei muito: o fato de que Python, ao contrário de Perl, Java, C, C++ e outras linguagens, não possui escopo de bloco para&lt;span style="font-weight: bold;"&gt; variáveis&lt;/span&gt;. Ou seja: variáveis declaradas dentro de um bloco for, if ou while são  &lt;span style="font-weight: bold;"&gt;válidas e visíveis fora dele&lt;/span&gt;. O escopo de&amp;nbsp; variáveis é função, módulo, objeto ou método. Também não gosto muito do fato de bastar atribuir um valor a uma variável que ela passa a existir: um modo strict semelhante ao Perl seria bem vindo. &lt;br&gt;&lt;br&gt;Alguns pontos importantes restam a ser analisados e aprendidos, como orientação a objeto, reflection, organização de pacotes e uso de bibliotecas como processamento de XML, sockets, HTTP e acesso à base de dados. Isso fica para um próximo artigo. &lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19831061-115016871660999907?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/115016871660999907/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=115016871660999907' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/115016871660999907'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/115016871660999907'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2006/06/python-primeiras-impresses.html' title='[Python] Primeiras impressões'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-114979673738104427</id><published>2006-06-08T16:58:00.000-03:00</published><updated>2006-06-09T11:06:53.173-03:00</updated><title type='text'>[Linux Shell] Mão na roda</title><content type='html'>Nos últimos meses eu andei processando e extraindo &lt;span style="font-weight: bold;"&gt;dados&lt;/span&gt;  de algumas centenas de milhares de arquivos de genética. Na maioria dos casos eu uso Perl ou Python para fazer o processamento mais pesado e gerar arquivos de resumo...relatórios simplificados: em geral, um conjunto de colunas. Eu costumava fazer o processamento final desses  &lt;span style="font-weight: bold;"&gt;relatórios&lt;/span&gt; em programas de planilha como Excel ou OpenOffice. Mas  graças a alguns hackers jedi que trabalham comigo eu aprendi alguns truques velhos conhecidos dos usuários antigos de linux,  e antes de abrir esses programas, eu vejo se eu consigo extrair as &lt;span style="font-weight: bold;"&gt;informações &lt;/span&gt;  necessárias usando os &lt;span style="font-weight: bold;"&gt;programinhas&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;utilitários&lt;/span&gt; do &lt;span style="font-weight: bold;"&gt;Shell &lt;/span&gt;do &lt;span style="font-weight: bold;"&gt; Linux&lt;/span&gt;. É incrível a quantidade de pequenos &lt;span style="font-weight: bold;"&gt;utilitários&lt;/span&gt; de &lt;span style="font-weight: bold;"&gt;linha de comando&lt;/span&gt; que executam tarefas muito simples e que podem ser uma mão na roda (isso sem mencionar awk e sed..mas aí já complica). Como eu sou um mero iniciante na arte de processamento simples de texto em  &lt;span style="font-weight: bold;"&gt;shell&lt;/span&gt;, conheço apenas alguns que vou citar aqui. Se conhecer outros, let me know :-)

&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;cut&lt;/span&gt; : pega um arquivo contendo colunas separadas por algum delimitador (tipo csv) e extrai uma ou mais colunas.
Por exemplo &lt;span style="font-style: italic;"&gt;cut -f1,2 -d" " meuarquivo&lt;/span&gt;  extrai as colunas 1 e 2 do arquivo  &lt;span style="font-style: italic;"&gt;meuarquivo&lt;/span&gt; cujas colunas estão delimitadas por espaços.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;sort&lt;/span&gt;: Lê linhas de um arquivo e imprime a versão ordenada crescentemente. A opção -n indica que as linhas representam números, a opção -r  ordena decrescentemente o arquivo e -u elimina elementos duplicados. &lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;uniq&lt;/span&gt;:  Lê um arquivo e descarta linhas idênticas sucessivas, imprimindo o resultado. Caso o arquivo esteja ordenado, elimina linhas duplicadas. A opção -c imprime o número de vezes sucessivas que uma linha apareceu no arquivo. &lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;grep&lt;/span&gt;: Esse é um clássico. Recupera linhas que contenham uma palavra ou expressão regular: muito útil para filtros. A opção -v faz com que o comando imprima as linhas que não contenham a palavra passada como filtro (inverte o processamento). &lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;wc&lt;/span&gt;: analisa um arquivo e conta quantas linhas, palavras, caracteres o arquivo possui. A opção -l imprime apenas o número de linhas de um arquivo.
&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt; Encadeando&lt;/span&gt; esses &lt;span style="font-weight: bold;"&gt;comandos&lt;/span&gt; de forma apropriada, é possível se obter informações bem interessantes de forma muito rápida. Por exemplo, se considerarmos o seguinte arquivo:

&lt;span style="font-family:courier new,monospace;"&gt;SCEP   2   PERFECT&lt;/span&gt; &lt;span style="font-family:courier new,monospace;"&gt;SCBF   2   P&lt;/span&gt;&lt;span style="font-family:courier new,monospace;"&gt; ERFECT&lt;/span&gt; &lt;span style="font-family:courier new,monospace;"&gt;SCCC   1   MISC&lt;/span&gt;&lt;span style="font-family:courier new,monospace;"&gt;
SCCC   3   P&lt;/span&gt;&lt;span style="font-family:courier new,monospace;"&gt; ERFECT&lt;/span&gt; &lt;span style="font-family:courier new,monospace;"&gt;SCSG   2   MISC&lt;/span&gt; &lt;span style="font-family:courier new,monospace;"&gt; SCCC   3   MISC&lt;/span&gt; &lt;span style="font-family:courier new,monospace;"&gt;SCSG   1   MISC
&lt;/span&gt;&lt;span style="font-family:courier new,monospace;"&gt;SCSB   1   P&lt;/span&gt;&lt;span style="font-family:courier new,monospace;"&gt; ERFECT&lt;/span&gt; &lt;span style="font-family:courier new,monospace;"&gt;SCRF   1   P&lt;/span&gt;&lt;span style="font-family:courier new,monospace;"&gt;ERFECT&lt;/span&gt;  &lt;span style="font-family:courier new,monospace;"&gt;SCAC   1   P&lt;/span&gt;&lt;span style="font-family:courier new,monospace;"&gt;ERFECT&lt;/span&gt;

Digamos que eu queira saber quantas vezes cada número aparece na segunda coluna, apenas nas linhas contendo a flag PERFECT. O comando em  shell seria o seguinte:

&lt;span style="font-family:courier new,monospace;"&gt;grep PERFECT file  |  cut -f2 -d" " | sort -n | uniq -c &lt;/span&gt;

C.Q.D. Have fun !&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19831061-114979673738104427?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/114979673738104427/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=114979673738104427' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/114979673738104427'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/114979673738104427'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2006/06/linux-shell-mo-na-roda.html' title='[Linux Shell] Mão na roda'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-114947369913086358</id><published>2006-06-04T23:10:00.000-03:00</published><updated>2006-06-04T23:16:58.650-03:00</updated><title type='text'>[Python] Meu segundo e terceiro programa</title><content type='html'>Fatorial
&lt;pre&gt;
def fat(n):
  if n == 0:
     return 1
  else:
 return n*fat(n-1)
&lt;/pre&gt;
Fibonacci
&lt;pre&gt;
def fibo(n):
   if n &lt;= 0:         
      return 0     
   elif n == 1:         
      return 1     
   else:  
      return fibo(n-1)+fibo(n-2) 
&lt;/pre&gt;

Classicos !&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19831061-114947369913086358?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/114947369913086358/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=114947369913086358' title='3 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/114947369913086358'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/114947369913086358'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2006/06/python-meu-segundo-e-terceiro-programa.html' title='[Python] Meu segundo e terceiro programa'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-114901267615309510</id><published>2006-05-30T15:11:00.000-03:00</published><updated>2006-05-30T15:11:16.173-03:00</updated><title type='text'>[Python] Hello World</title><content type='html'>Meu primeiro programa em Python:&lt;br /&gt;&lt;br /&gt;print "Hello World!"&lt;br /&gt;&lt;br /&gt;UAU !&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19831061-114901267615309510?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/114901267615309510/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=114901267615309510' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/114901267615309510'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/114901267615309510'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2006/05/python-hello-world.html' title='[Python] Hello World'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-114885784225159814</id><published>2006-05-28T19:38:00.000-03:00</published><updated>2006-05-28T20:10:42.360-03:00</updated><title type='text'>Comunidades Software Livre</title><content type='html'>Eu acho que em algum post antigo deste blog eu já reclamei da falta de documentação decente da maioria dos projetos de software livre. Até projetos do porte do Eclipse e jakarta-Apache são bem fracos nesta parte. A Jakarta fornece uma documentação geral bastante interessante, sobre conceitos dos sub projetos deles, e sobre instalação básica, quick install, etc... Mas  quando se precisa de detalhes de configuração e coisa mais profissionais, aí a documentação não dá conta (por exmplo: até hoje não consegui encontrar uma lista completa dos validadores disponíveis no struts, com sintaxe, parâmetros e coisas do gênero).
Nessas horas, essa falta de documentação é compensada pelas listas de discussão dos projetos. Uma característica muito forte da comunidade OpenSource/Software livre é a facilidade com que se consegue trocar informações e idéias com usuários e desenvolvedores. Recentemente, tive dificuldades pra resolver um problema da minha aplicação struts: pesquisei durante dois dias em documentação, blogs, artigos, e simplesmente não conseguia encontrar a forma de fazer o que eu queria. Daí resolvi me cadastrar na lista de usuários e desenvolvedores do projeto: em duas horas consegui uma resposta, e de quebra ainda tirei dúvida de duas pessoas e treinei meu inglês. Eu já tinha tido a oportunidade de usar estas listas quando trabalhava com programação de barramento Firewire em Linux. Aconselho fortemente o uso deste recurso, mas sempre respeitando as regras das listas. E sobretudo: uma boa pesquisa prévia sobre o assunto é sempre bem vinda.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19831061-114885784225159814?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/114885784225159814/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=114885784225159814' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/114885784225159814'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/114885784225159814'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2006/05/comunidades-software-livre.html' title='Comunidades Software Livre'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-114885478986601086</id><published>2006-05-28T19:00:00.000-03:00</published><updated>2006-05-28T19:20:52.543-03:00</updated><title type='text'>Objetos em Javascript</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Javascript&lt;/span&gt; fornece mecanismos básicos para criação de &lt;span style="font-weight: bold;"&gt;objetos&lt;/span&gt;. Digo básico porque os objetos em Javascript podem ser encaradas como estruturas de dados "anabolizadas": apenas variáveis e funções para mexer nestas variáveis. A linguagem não permite mecanismos mais complexos de &lt;span style="font-weight: bold;"&gt;orientação a objetos&lt;/span&gt;, como criar restrições de acesso (variáveis e métodos públicos e privados), polimorfismo, herança (até encontrei alguns exemplos de mecanismos de simulação de herança, mas que me parecem muito exagerados) e construtores múltiplos. Mas se levarmos em conta que o objetivo de &lt;span style="font-weight: bold;"&gt;Javascript&lt;/span&gt; é tornar as páginas HTML mais dinâmicas adicionando pequenos programinhas client-side, então podemos concluir que os mecanismos de &lt;span style="font-weight: bold;"&gt;OO&lt;/span&gt; oferecidos são mais do que suficientes.

Segue abaixo um código simples, de um objeto que simula o comportamento de um StringBuffer em Javascript (cujas vantagens foram discutidas&lt;a href="http://log4dev.blogspot.com/2006/04/stringbuffer-em-javascript.html" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)"&gt; neste post&lt;/a&gt;):

&lt;pre&gt;function StringBuffer() {
this.buffer = [];
};

StringBuffer.prototype.append = function append(string) {
 this.buffer.push(string);
return this;
};

StringBuffer.prototype.toString
= function toString() {
return this.buffer.join("");
};

&lt;/pre&gt;
O código acima cria um objeto do tipo StringBuffer, com um construtor vazio e com um atributo buffer. Depois cria 2 métodos: append e toString. Dois pontos são interessantes no código acima:

&lt;ol&gt;   &lt;li&gt;Um objeto em Javascript é no fundo uma função, e o construtor é a lista de parâmetros desta função.
&lt;/li&gt;   &lt;li&gt;O objeto prototype, interno a qualquer objeto Javascript, permite que se adicione métodos e atributos em runtime em &lt;span style="font-weight: bold;"&gt;qualquer&lt;/span&gt; objeto Javascript, incluindo &lt;span style="font-weight: bold;"&gt;objetos&lt;/span&gt; da biblioteca padão.&lt;/li&gt;
&lt;/ol&gt;Uma outra forma de escrever o objeto acima seria com a seguinte sintaxe:

&lt;pre&gt;function StringBuffer() {
this.buffer = [];

append = function append(string) {
    this.buffer.push(string);
    return this;
};

toString = function toString() {
    return this.buffer.join("");
};
}

&lt;/pre&gt;Qualquer instrução que estiver fora de alguma função interna será executada automaticamente quando se criar um novo objeto do tipo StringBuffer, sendo portanto o equivalente à um construtor.

Minha opinião: o uso de objetos em JS é altamente recomendado para suprir a falta de estruturas de dados mais sofisticadas e para organizar certas partes do código&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19831061-114885478986601086?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/114885478986601086/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=114885478986601086' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/114885478986601086'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/114885478986601086'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2006/05/objetos-em-javascript.html' title='Objetos em Javascript'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-114859030663287193</id><published>2006-05-25T17:51:00.000-03:00</published><updated>2006-05-25T17:51:46.703-03:00</updated><title type='text'>Apple Store - 5th avenue, New York</title><content type='html'>As imagens falam por si só...o design dessa nova loja da Apple é um tanto quanto impressionante. Pelo menos a entrada !&lt;br&gt;&lt;br&gt;&lt;a href="http://www.apple.com/retail/fifthavenue/gallery/index.html"&gt;http://www.apple.com/retail/fifthavenue/gallery/index.html &lt;/a&gt;&lt;br&gt;&lt;br&gt;Um dia ainda vou visitar (daí aproveito e visito a Big Apple também...)&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19831061-114859030663287193?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/114859030663287193/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=114859030663287193' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/114859030663287193'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/114859030663287193'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2006/05/apple-store-5th-avenue-new-york.html' title='Apple Store - 5th avenue, New York'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-114788565615754641</id><published>2006-05-17T14:07:00.000-03:00</published><updated>2006-05-17T14:07:36.246-03:00</updated><title type='text'>Google WebToolkit</title><content type='html'>A Google é uma das poucas empresas que eu conheço que consegue superar minhas espectativas a cada novo lançamento. É incrível a capacidade que eles tem de desenvolver produtos interessantes, e sobretudo a capacidade que eles tem de oferecer ferramentas de alto nível para desenvolvedores.&lt;br /&gt;&lt;br /&gt;O mais novo exemplo é o &lt;a href="http://code.google.com/webtoolkit/"&gt;&lt;b&gt;Google WebToolkit&lt;/b&gt;&lt;/a&gt;, que acaba de sair do forno. A idéia é fornecer uma &lt;b&gt;API&lt;/b&gt; para facilitar a programação de aplicativos &lt;b&gt;WEB AJAX&lt;/b&gt; em Java. Eu só li a documentação, e portanto tenho no momento uma visão superficial do sistema. Mas basicamente a idéia é que o desenvolvedor escreve uma interface gráfica em Java, como se fosse um programa desktop com interface SWING, e o Google WebToolkit compila sua página em código Javascript. Se não me engano, o funcionamento é muito parecido com o Java Server Faces da Sun.&lt;br /&gt;&lt;br /&gt;Vantagens desse mecanismo:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Torna o processo de desenvolvimento de interfaces mais rápido, sobretudo para aqueles que não são experts em Javascript (e nem querem se tornar), e para aqueles que querem manter a compatibilidade de browsers&lt;/li&gt;&lt;li&gt;Facilita o processo de debug, uma vez que pode se utilizar JUnits e&amp;nbsp; debuggers de Java para testar a interface&lt;/li&gt;&lt;li&gt;Permite acesso a todas as funcionalidades da API Java...eles que se virem pra traduzir isso em&amp;nbsp; Javascript.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;Para aqueles que trabalham com &lt;b&gt;Eclipse&lt;/b&gt;, mais um ponto interessante: o&amp;nbsp; &lt;b&gt;GWT&lt;/b&gt; já vem com um&amp;nbsp; script projectCreator, que cria toda a árvore de arquivos, scripts e classpath necessários para criar um projeto dentro do IDE.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;Bom, por enquanto é só pessoal. Assim que tiver mais detalhes, entro em contato.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19831061-114788565615754641?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/114788565615754641/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=114788565615754641' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/114788565615754641'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/114788565615754641'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2006/05/google-webtoolkit.html' title='Google WebToolkit'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-114769790060310019</id><published>2006-05-15T09:58:00.000-03:00</published><updated>2006-05-15T09:58:20.610-03:00</updated><title type='text'>Captura de teclas em Javascript - Parte 2</title><content type='html'>Demorei pra escrever a segunda parte desse pequeno tutorial, mas antes tarde do que nunca. No post anterior eu expliquei brevemente o funcionamento da captura de teclas em Javascript. Neste vou colocar uma receitinha de bolo.&lt;br /&gt;&lt;br /&gt;Segue o código, compatível com IE e Firefox. Qualquer dúvida com os comentarios, entre em contato:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;document.onkeyup=handleKeyboardAction;&lt;br /&gt;&lt;br /&gt;function handleKeyboardAction(e){&lt;br /&gt;&lt;br /&gt;   var code;&lt;br /&gt;&lt;br /&gt;  // Obtém o evento. No caso do Firefox, este&lt;br /&gt;  // evento é passado como argumento, e no caso do IE,&lt;br /&gt;  // deve ser obtido através do objeto window.&lt;br /&gt;   if (!e) var e = window.event; &lt;br /&gt;&lt;br /&gt;   // Detecta o target da tecla  &lt;br /&gt;   var targ;&lt;br /&gt;   if (e.target) targ = e.target;&lt;br /&gt;   else if (e.srcElement) targ = e.srcElement;&lt;br /&gt;   &lt;br /&gt;   // Este código previne um erro do navegador Safari:&lt;br /&gt;  // Se o usuari clica num DIV com texto, os outros browsers&lt;br /&gt;  // retornam o DIV como sendo o target. Safari retorna  o nó contendo&lt;br /&gt;  // o texto (nodeType 3). Nesse caso, o target que nos interessa é o pai.&lt;br /&gt;   if (targ.nodeType == 3) // defeat Safari bug&lt;br /&gt;      targ = targ.parentNode;&lt;br /&gt;&lt;br /&gt;  // Obtém o nome da TAG HTML do target do evento&lt;br /&gt;   tag = targ.tagName.toUpperCase();&lt;br /&gt;&lt;br /&gt;  // Verifica se o evento não esta sendo acionado em nenhum&lt;br /&gt;  // campo como campo de texto e combobox.&lt;br /&gt;  // Esta verificação é importante, pois o handler pode bloquear&lt;br /&gt;  // o funcionamento adqueado desses campos (por exemplo, em vez de escrever&lt;br /&gt;  // a letra no campo, executa uma função).&lt;br /&gt;   if (tag == "INPUT")&lt;br /&gt;      return;&lt;br /&gt;&lt;br /&gt;   if (tag == "SELECT")&lt;br /&gt;		return;&lt;br /&gt;&lt;br /&gt;   // Detecta o codigo da tecla&lt;br /&gt;   if (e.keyCode) code = e.keyCode;&lt;br /&gt;   else if (e.which) code = e.which;&lt;br /&gt;&lt;br /&gt;   var character = String.fromCharCode(code);&lt;br /&gt;&lt;br /&gt;  // Executa o procedimento associado à uma letra.&lt;br /&gt;   if(character == "R"){&lt;br /&gt;   } &lt;br /&gt;&lt;br /&gt;       //Seta para cima&lt;br /&gt;	if(code == 38) {&lt;br /&gt;           ...&lt;br /&gt;          return;       &lt;br /&gt;	} &lt;br /&gt;	&lt;br /&gt;	//Seta para direita&lt;br /&gt;	if(code == 39) {&lt;br /&gt;            ...&lt;br /&gt;            return;&lt;br /&gt;	} &lt;br /&gt;	&lt;br /&gt;	//Seta para esquerda&lt;br /&gt;	if(code == 37) {&lt;br /&gt;		return;&lt;br /&gt;	} &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19831061-114769790060310019?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/114769790060310019/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=114769790060310019' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/114769790060310019'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/114769790060310019'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2006/05/captura-de-teclas-em-javascript-parte.html' title='Captura de teclas em Javascript - Parte 2'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-114545646429529293</id><published>2006-04-19T11:21:00.000-03:00</published><updated>2006-04-19T11:21:04.346-03:00</updated><title type='text'>Captura de teclas em Javascript - Parte 1</title><content type='html'>A sigla &lt;span style="font-weight: bold;"&gt;Web 2.0&lt;/span&gt; tem sido muito utilizada recentemente. Talvez seja o nome mais marketeiro depois de &lt;span style="font-weight: bold;"&gt;AJAX&lt;/span&gt;. Aliás &lt;span style="font-weight: bold;"&gt; Web 2.0&lt;/span&gt; depende muito de &lt;span style="font-weight: bold;"&gt;AJAX&lt;/span&gt;. O fato é que softwares Web-based com comportamentos muito semelhantes à aplicações desktop tem pipocado pela internet, e com certeza os exemplos mais impressionantes e eficientes são os produtos lançados pela Google, como o Google Maps, Google Calendar, Google Reader, entre outros.&amp;nbsp; E de fato, o grande barato da Web  2.0 é tentar mudar o paradigma de uso da internet, tornando a experiência do usuário mais rica e interativa (detesto essa expressão &amp;quot;experiência rica&amp;quot;, mas no momento não me veio nada mais apropriado), fazendo com que a web deixe de ser um conjunto de hipertextos, e passe a ser um conjunto de serviços. &lt;br&gt;&lt;br&gt;Neste esforço de deixar as interfaces web mais interativas, dinâmicas e eficientes, a captura e tratamento de eventos de teclado pode ser uma característica desejável e desejada. A boa notícia é que fazer isso é relativamente simples, usando  &lt;span style="font-weight: bold;"&gt;Javascript&lt;/span&gt;. Existem basicamente 3 tipos de eventos de tecla que se pode capturar: &lt;span style="font-weight: bold;"&gt;keyDown&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;keyPress&lt;/span&gt; e  &lt;span style="font-weight: bold;"&gt;keyUp&lt;/span&gt;. Os eventos keyDown e keyUp são disparados respectivamente no momento de descida e subida da tecla, e o evento keyPress é disparado quando a tecla está pressionada. Portanto quando uma tecla é pressionada, os eventos são disparados na ordem &lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;keyDown&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;keyPress&lt;/span&gt; e &lt;span style="font-weight: bold;"&gt;keyUp. &lt;/span&gt;&lt;br&gt;&lt;br&gt;É interessante notar que a forma como os eventos é disparada varia ligeiramente dependendo do  S.O: no &lt;span style="font-weight: bold;"&gt;Linux&lt;/span&gt;, os eventos keyDown e keyUp são disparados apenas uma vez por evento de tecla, e keyPress é disparado várias vezes, enquanto a tecla estiver pressionada (não sei bem qual a taxa de disparo, mas é bastante rápida). Já no  &lt;span style="font-weight: bold;"&gt;Windows&lt;/span&gt;  (tanto no IE quanto no Firefox), apenas o evento onKeyUp é disparado apenas uma vez por evento. Os eventos keyDown e keyPress são disparados sequencialmente enquanto a tecla estiver pressionada (ou seja, caso você mantenha a tecla apertada, o sistema irá lançar a seqüência keyDown-keyPress-keyDown-keyPress....). Não tive a oportunidade de testar no  &lt;span style="font-weight: bold;"&gt;Mac OS&lt;/span&gt;, o que é uma folha imperdoável já que eu só uso Mac em casa, mas testarei assim que possível. Esta pequena diferença faz com que a estratégia de captura seja diferente&amp;nbsp; dependo do evento desejado. As seguinte situações me vêem à cabeça: &lt;br&gt;&lt;br&gt;&lt;ol&gt;&lt;li&gt;O sistema deseja capturar apenas um evento por tecla pressionada. No Linux pode se usar onKeyDown ou onKeyUp. No Windows, apenas onKeyUp. Portanto, para que o script seja funcional em todos os sistemas, a melhor escolha é onKeyUp. &lt;br&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;O sistema deseja capturar repetidamente uma tecla pressionada, para simular por exemplo o funcionamento de uma tecla pressionada numa caixa de texto (imprime várias vezes o caractere pressionado). Neste caso, a melhor escolha é onKeyPress, que funciona nos dois SOs. Mas é preciso tomar cuidado no caso do Windows:&amp;nbsp; caso o handler de onKeyDown estiver habilitado também, o sistema irá capturar duas vezes o evento, o que pode ser problemático. &lt;br&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;O sistema deseja capturar uma vez a descida da tecla, e uma vez a subida. Isso pode ser útil para medir o tempo de pressão da tecla. No caso&amp;nbsp; do Linux, é muito simples: um handler para keyDown e um&amp;nbsp; handler para keyUp, e ambos eventos serão disparados apenas uma vez. No caso do Windows, a estratégia é mais complicada, uma vez que onKeyDown será lançado repetidas vezes. Eu não tenho uma solução em mãos, mas deve ser necessário fazer um controle de qual tecla foi apertada, e não executar caso o evento ja tenha sido processado. &lt;br&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;O sistema deseja capturar a descida da tecla uma vez, processar a tecla pressionada várias vezes, e capturar a subida da tecla uma vez.&amp;nbsp; Tanto no caso do Windows quanto do Linux, me parece que a melhor solução é criar um handler para cada evento, mesclando as situações 2 e 3. Em ambos os casos, a ordem de execução será keyDown, keyPress e keyUp. No caso do windows, será necessário utilizar a mesma solução da situação 3 para evitar que keyDown seja processado várias vezes. &lt;/li&gt;&lt;/ol&gt;Como eu não sei qual o tamanho máximo de um artigo neste blog, vou deixar para o próximo post a descrição de como escrever o código para capturar estes eventos.&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19831061-114545646429529293?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/114545646429529293/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=114545646429529293' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/114545646429529293'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/114545646429529293'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2006/04/captura-de-teclas-em-javascript-parte.html' title='Captura de teclas em Javascript - Parte 1'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-114536849813553025</id><published>2006-04-18T10:54:00.000-03:00</published><updated>2006-04-18T10:54:58.186-03:00</updated><title type='text'>Boot Triplo</title><content type='html'>Num post recente, falei sobre o BootCamp da Apple, que permite instalar um sistema Dual Boot (Mac OS e Windows XP) nos novos Macs com processadores Intel. E deixei no ar a seguinte pergunta: será que alguém já descobriu um esquema para Triple Boot ?  &lt;span style="font-weight: bold;"&gt;Já&lt;/span&gt; ! O &lt;a href="http://wiki.onmac.net/index.php/Triple_Boot_via_BootCamp"&gt;Wiki do OnMac&lt;/a&gt; tem uma receita para instalar Gentoo no MacBookPro. Não foi testado com outras distros nem outros modelos (iMac e Mini), mas isso é uma questão de tempo. &lt;br clear="all"&gt;&lt;br&gt;&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19831061-114536849813553025?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/114536849813553025/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=114536849813553025' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/114536849813553025'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/114536849813553025'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2006/04/boot-triplo.html' title='Boot Triplo'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-114530471965050931</id><published>2006-04-17T17:11:00.000-03:00</published><updated>2006-04-17T17:11:59.680-03:00</updated><title type='text'>Ambiente de desenvolvimento</title><content type='html'>Há um tempo atrás eu pensei em escrever um post descrevendo o &lt;span style="font-weight: bold;"&gt;ambiente de desenvolvimento &lt;/span&gt;que eu uso para escrever aplicações Web em Java. Basicamente Eclipse+Tomcat+Ant. A idéia era fazer um passo a passo, explicando os motivos das esolhas, características e vantagens do setup utilizado. Confesso que nunca escrevi por pura preguiça. Mas hoje resolvi escrever algo sobre ambientes de desenvolvimento de forma mais genérica. Dedico ao meu colega Raphael, que vive dizendo que ama emacs, mas vira e mexe me pentelha porque não consegue trabalhar direito com Eclipse e Tomcat. &lt;br&gt;&lt;br&gt;Primeira má notícia: configurar ambiente de trabalho pode ser longo e chato. Sobretudo se&amp;nbsp; estiver trabalhando com&amp;nbsp; Linux e ferramentas livres. IDEs pagas em geral são mais bem documentadas e portanto mais fáceis, o que aliás justifica o&amp;nbsp; preço pago. E mesmo assim, tem que se perder um tempinho pra deixar o pacote do jeito desejado. Segunda má notícia: ter um bom ambiente de desenvolvimento é condição sine qua non para ter uma produtividade adequada. &lt;br&gt;&lt;br&gt;Não vou entrar no mérito de quais ferramentas são as melhores. Isso é muito pessoal, e vai do gosto de cada um...tentar discutir isso é entrar numa guerra de crenças quase religiosas. Até hoje não se chegou a um consendo sobre qual editor é melhor: VI ou Emacs. Eu prefiro Emacs, porque até hoje sou incapaz de abrir um arquivo e editar o seu conteúdo em VI.&amp;nbsp; O fato é que existe uma grande quantidade de setups adequados para se desenvolver uma aplicação desde que bem configurados. Do meu ponto de vista, uma configuração básica deve ter um esquema de  &lt;span style="font-weight: bold;"&gt;controle de versão&lt;/span&gt;, um bom &lt;span style="font-weight: bold;"&gt;editor de código&lt;/span&gt; (se possível com syntax highlight, auto-complete, sistema de refactoring,&amp;nbsp; busca eficiente), e um bom sistema para  &lt;span style="font-weight: bold;"&gt;compilação&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;testes&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;integração&lt;/span&gt; e &lt;span style="font-weight: bold;"&gt;distribuição do aplicativo&lt;/span&gt;. No melhor dos mundos, cada uma dessas ações deve ser executada com apenas um comando (one step build, uma das  &lt;a href="http://log4dev.blogspot.com/2006/01/teste-simples-de-qualidade-de.html"&gt;características definidas por Joel Spolsky para medir a qualidade de uma empresa de desenvolvimento&lt;/a&gt;). O compilador pode ser&amp;nbsp; javac, gcj, jikes, gcc. O builder pode ser o ANT, Make, Shell Script. Sistema de versão pode ser CVS, subversion, ou qualquer outro que exista ou que venha a existir e que eu não conheço. Editor tem aos montes: eclipse, emacs, jEdit, VI, entre outros. Não importa muito qual o conjunto de ferramentas utilizado, desde que seja eficiente, compartilhado por toda a sua equipe de desenvolvimento,&amp;nbsp; e possa ser usado a qualquer momento sem nenhuma grande complicação: ter que modificar comandos manualmente durante o processo ou tentar montar isso emergencialmente pode ser uma fonte de erros e dores de cabeça. &lt;br&gt;&lt;br&gt;Portanto, conselho de amigo: antes de mais nada, defina quais ferramentas você prefere, assuma essa escolha, e passe um tempinho deixando tudo funcionando perfeitamente. Isso com certeza irá poupar muito tempo mais tarde. &lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19831061-114530471965050931?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/114530471965050931/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=114530471965050931' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/114530471965050931'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/114530471965050931'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2006/04/ambiente-de-desenvolvimento.html' title='Ambiente de desenvolvimento'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-114484789479741030</id><published>2006-04-12T10:18:00.000-03:00</published><updated>2006-04-12T10:18:14.846-03:00</updated><title type='text'>Divs e combos no IE</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Apo sto que muitos desenvolvedores &lt;b&gt;Web&lt;/b&gt; já tiveram o seguinte problema com &lt;b&gt;Internet Explorer&lt;/b&gt;: criam um &lt;b&gt;DIV&lt;/b&gt; (por exemplo, em um menu contextual, ou um tooltip), que aparece bonitinho na tela, mas que para seu desespero fica embaixo de uma caixa de seleção (o famoso combo box). O pior é quando se descobre isso um mês depois, quando um cliente resolve redimensionar a janela, e o combo box em questão vai parar no meio da área visível do &lt;b&gt;DIV&lt;/b&gt;. Quem já teve este problema, sabe que mudar o &lt;b&gt;z-index&lt;/b&gt; não adianta nada, porque no &lt;b&gt;IE&lt;/b&gt; o &lt;b&gt;combobox&lt;/b&gt; fica acima de tudo, não levando em conta o parâmetro de profundidade. Graças a algumas pesquisas do meu colega Christian, encontramos uma solução para isso: basta criar um &lt;b&gt;IFRAME&lt;/b&gt; e colocar exatamente embaixo do &lt;b&gt;DIV&lt;/b&gt;, com as mesmas coordenadas e tamanho e com zindex do &lt;b&gt;IFRAME&lt;/b&gt; inferior ao do &lt;b&gt;DIV&lt;/b&gt;. Por algum motivo que me escapa, o IFRAME encobre o COMBOBOX, e mesmo assim aceita o parâmetro de profundidade, exibindo o DIV de forma correta.&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/19831061-114484789479741030?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/114484789479741030/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=114484789479741030' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/114484789479741030'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/114484789479741030'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2006/04/divs-e-combos-no-ie.html' title='Divs e combos no IE'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-114434599982881080</id><published>2006-04-06T14:53:00.000-03:00</published><updated>2006-04-06T14:53:19.836-03:00</updated><title type='text'>StringBuffer em Javascript</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Quem programa em &lt;b&gt;Java&lt;/b&gt; sabe que operações de &lt;b&gt;concatenações&lt;/b&gt; de &lt;b&gt;String&lt;/b&gt; são muito mais eficientes utilizando &lt;b&gt;StringBuffer&lt;/b&gt; e função &lt;b&gt;append&lt;/b&gt; do que usando o comando &lt;i&gt;&lt;b&gt;String A = String B + String C&lt;/b&gt;&lt;/i&gt;. Isso porque a cada operação de soma dessas, uma nova String é alocada para que seja feita a cópia dos dados, e alocação de memória em Java é uma operação cara.&lt;br/&gt;&lt;br/&gt;Em &lt;b&gt;Javascript&lt;/b&gt;, esse problema também ocorre. Pesquisando na Internet, descobri um código que simula o comportamento de um StringBuffer em nessa linguagem. Fizemos alguns testes no IE e no firefox, com um loop que concatena Strings. No Firefox, a diferença entre usar o operador &lt;b&gt;+&lt;/b&gt; e a função append é pequena. A grande vantagen é que a segunda é mais estável em termos de performance que a primeira.&lt;br/&gt;&lt;br/&gt;Em compensação, no IE o uso de append é absurdamente mais eficiente do que no firefox. Testes mostram que para concatenar 1000 Strings de tamanho 100, o append era 60 vezes mais rápido. Portanto, seu uso é altamente recomendável em scripts que façam muitas concatenações e que precisam ser otimizados.&lt;br/&gt;&lt;br/&gt;Segue o código:&lt;br/&gt;&lt;br/&gt;&lt;pre&gt;&lt;br/&gt;function StringBuffer() { &lt;br/&gt;     this.buffer = []; &lt;br/&gt;};&lt;br/&gt;&lt;br/&gt;StringBuffer.prototype.append = function append(string) {&lt;br/&gt;      this.buffer.push(string); &lt;br/&gt;     return this; &lt;br/&gt;}; &lt;br/&gt;&lt;br/&gt;StringBuffer.prototype.toString = function toString() {&lt;br/&gt;     return this.buffer.join(""); &lt;br/&gt;};&lt;br/&gt;&lt;/pre&gt;Para usar, basta criar uma variável do tipo StringBuffer:&lt;br/&gt;&lt;br/&gt;var buffer = new StringBuffer();&lt;br/&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/19831061-114434599982881080?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/114434599982881080/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=114434599982881080' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/114434599982881080'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/114434599982881080'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2006/04/stringbuffer-em-javascript.html' title='StringBuffer em Javascript'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-114432788044961513</id><published>2006-04-06T09:50:00.000-03:00</published><updated>2006-04-06T09:51:20.466-03:00</updated><title type='text'>Dual boot em macs</title><content type='html'>&lt;i&gt;"Os Macs usam uma tecnologia de indústria ultra-moderna chamada EFI para cuidar do booting da máquina. Infelizmente, o Windows XP, e mesmo o não lançado Vista, estão presos nos anos 80 com a antiga BIOS. Mas com o Boot Camp, o Mac podem operar suavemente em ambos os séculos"&lt;/i&gt;

Esta frase, citada no artigo da &lt;a href="http://idgnow.uol.com.br/computacao_pessoal/2006/04/05/idgnoticia.2006-04-05.3258702610/IDGNoticia_view"&gt;IDG Now&lt;/a&gt;, é da própria &lt;b&gt;Apple&lt;/b&gt;. Sim, a empresa do tio Jobs desenvolveu uma solução oficial (&lt;a href="http://www.apple.com/macosx/bootcamp/"&gt;BootCamp&lt;/a&gt;) para executar &lt;b&gt;Windows XP&lt;/b&gt; em &lt;b&gt;Macs Intel Based&lt;/b&gt;, liberada algumas semanas depois da solução desenvolvida por um hacker. Ou seja: é oficial, poderei rodar &lt;b&gt;Flight Simulator &lt;/b&gt;no meu &lt;b&gt;Mac&lt;/b&gt;. &lt;b&gt;Cool!!!!!

&lt;/b&gt;Agora so falta termos uma versão de Linux pros novos Macs (já temos ? não sei), e pronto....3 em 1.&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/19831061-114432788044961513?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/114432788044961513/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=114432788044961513' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/114432788044961513'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/114432788044961513'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2006/04/dual-boot-em-macs.html' title='Dual boot em macs'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-114417239636266006</id><published>2006-04-04T14:39:00.000-03:00</published><updated>2006-04-04T14:48:08.940-03:00</updated><title type='text'>Envio de grandes conjuntos de dados com AJAX</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Hoje, totalmente por acaso, descobri alguns macetes para envio e recepção de grandes quantidades de dados com AJAX, como por exemplo textos. Estou trabalhando em um sistema que permite que o usuário cadastre pareceres sobre informações do sistema, e estes pareceres não tem limitação de tamanho.

O sistema foi implementado com &lt;b&gt;AJAX&lt;/b&gt;, para permitir que os pareceres sejam carregados dinâmicamente, e gravados assincronamente. O primeiro problema que tive foi que os textos enviados eram sempre truncados em 4096 bytes. A primeira reação foi verificar se estava enviando os dados via POST ou GET: o correto é enviar por POST, uma vez que GET tem tamanho limitado. Os dados realmente estavam sendo enviados por POST, que a priori não tem limitação alguma. Pesquisando um pouco, descobri que precisava definir um &lt;b&gt;header&lt;/b&gt; &lt;b&gt;Content-length&lt;/b&gt; com o tamanho do conteúdo do texto, antes de enviar a requisição. O comando correto é

&lt;pre&gt;requestObject.open('POST', url, true);
requestObject.setRequestHeader('Content-Type',
                             'application/x-www-form-urlencoded');
if (parameters != null)
    requestObject.setRequestHeader("Content-length",
                                   parameters.length);
requestObject.send(parameters);
&lt;/pre&gt;
Bom, eu não sou um expert do protocolo &lt;b&gt;HTTP&lt;/b&gt;, mas a minha explicação seria que de fato o método &lt;b&gt;POST&lt;/b&gt; aceita uma quantidade ilimitada de dados, mas por default ele define o tamanho máximo como &lt;b&gt;4096&lt;/b&gt;, para evitar erros. Caso o usuário deseje enviar mais, deve informar o tamanho total.

Resolvido este problema, tive um problema semelhante ao ler os dados para exibir na tela. Meu sistema abre uma requisição &lt;b&gt;AJAX&lt;/b&gt;, que envia um &lt;b&gt;XML&lt;/b&gt; contendo o texto do parecer inserido pelo usuário. Para recuperar o texto, executava o seguinte comando:
&lt;pre&gt;
var value = decodeURIComponent(
                 root.getElementsByTagName('value')[0].
                                       firstChild.data);
&lt;/pre&gt;
Este código retornava o texto corretamente no IE, mas cortava em 4096 bytes (novamente !) no &lt;b&gt;Firefox&lt;/b&gt;. O mais estranho é que tanto no envio quanto na recepção, o &lt;b&gt;XML&lt;/b&gt; gerado estava correto. Portanto o problema estava na leitura do&lt;b&gt; CDATA&lt;/b&gt; do &lt;b&gt;XML&lt;/b&gt;. Fuçando um pouco (desta vez não encontrei nada na internet), descobri que em caso de &lt;b&gt;CDATA&lt;/b&gt; com mais de &lt;b&gt;4096 bytes&lt;/b&gt;, o &lt;b&gt;DOM&lt;/b&gt; do Firefox considera que a tag &lt;b&gt;value &lt;/b&gt;possui mais de um nó filho, cada um com no máximo 4K. Assim, o código correto para obter o texto em ambos os navegadores é

&lt;pre&gt;for(var i=0; i i++)
     value += decodeURIComponent(
                     root.getElementsByTagName('value')[0]
                           .childNodes[i].data);
&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19831061-114417239636266006?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/114417239636266006/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=114417239636266006' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/114417239636266006'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/114417239636266006'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2006/04/envio-de-grandes-conjuntos-de-dados.html' title='Envio de grandes conjuntos de dados com AJAX'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-114382181638101253</id><published>2006-03-31T13:16:00.000-03:00</published><updated>2006-03-31T17:09:22.513-03:00</updated><title type='text'>Código em Perl</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;span style="font-size:100%;"&gt; 
&lt;pre&gt;
sub setSubtraction {     
    my ($min, $st) = @_;          
    my @minuendo = @{$min};
    my @subt = @{$st};     
    my %hm;    
    my %hs;     
    my @res;     

    foreach(@minuendo){ $hm{$_} = 1;}         
    foreach(@subt){$hs{$_} = 1;}     

    while (($key, $value) = each(%hm)){  
        if($hs{$key} != 1){     
            push @res, $key;   
        }    
    }
     
    return @res;   
}
&lt;/pre&gt;
O código acima ilustra alguns pontos pelos quais eu demorei muito pra aprender Perl. E mesmo já tendo feito alguns programas em Perl, ainda tenho extrema dificuldade em ler um programa....porque nunca me lembro o que %, @ e $ representam, e para qual variável $_ aponta. As coisas são pouco intuitivas, e os programas em geral são feios e difíceis de serem lidos (sobre tudo se tiverem expressões regulares).

Tá certo que eu não sou um grande expert de Perl, mas mesmo pessoas que conhecem a linguagem demoraram pra ver o que o programa fazia. E pior: cada uma das pessoas que viu o código usaria outra síntaxe para escrever alguns trechos do programa (cada uma deu uma sugestão diferente para trechos diferentes). Sem mudar o algoritmo e as estruturas de dados usadas, existem N variantes de sintaxe possíveis. Acho que muita flexibilidade às vezes atrapalha.

Como diria o Raphael, autor do código acima: "Write once, never read it again". Fico imaginando o trabalho que deve ser manter grandes sistemas.

Agora, reconheço o poder de Perl para tratar strings, textos e afins, e por sua rapidez para escrever protótipos. Foi por isso que escolhi essa linguagem (que na época não conhecia) para escrever um programa que lia um texto e etiquetava as palavras segundo a posição da sílaba tônica e número de sílabas. Em C teria sido muito mais difícil.

Alguém sabe me dizer o que o programinha acima faz ?
&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19831061-114382181638101253?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/114382181638101253/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=114382181638101253' title='22 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/114382181638101253'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/114382181638101253'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2006/03/cdigo-em-perl.html' title='Código em Perl'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>22</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-114364001031967055</id><published>2006-03-29T10:46:00.000-03:00</published><updated>2006-03-29T10:46:50.343-03:00</updated><title type='text'>Bug de segurança</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Implementação de aplicações web públicas (ou seja, que tem IP público e que seja acessível or qualquer pessoa) deve ser extremamente cuidadosa, sobretudo se o sistema inclui subsistemas de administração, de acesso restrito. Existem várias técnicas possíveis para proteger acesso à páginas restritas, como cookies, javascript, verificação de página de proveniencia, validação de tamanho de campos na interface para evitar buffer overflow, etc.... Dá pra fazer um curso universitário de um semestre sobre esse assunto. E não sei se sou a pessoa mais indicada para isso, apesar de já ter aprendido bastante na minha curta carreira de desenvolvedor de aplicações Web. O fato é que o seguro morreu de velho, e as vezes o perigo pode vir de lugares inesperados, como do próprio Google :-) O artigo "&lt;a href="http://www.thedailywtf.com/forums/65974/ShowPost.aspx"&gt;The Spider of Doom&lt;/a&gt;" relata que todo o conteúdo de um CMS foi apagado pelo spider do google (programinha que varre a internet para cadastrar páginas em seu buscador), simplesmente porque este seguiu um link da página contendo instruções para apagar a página. Wooops.&lt;br/&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/19831061-114364001031967055?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/114364001031967055/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=114364001031967055' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/114364001031967055'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/114364001031967055'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2006/03/bug-de-segurana.html' title='Bug de segurança'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-114320356155192781</id><published>2006-03-24T09:32:00.000-03:00</published><updated>2006-03-24T09:32:41.570-03:00</updated><title type='text'>Vida longa para os Macs</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Quem tem Macs em casa ou no trabalho sabe que são máquinas que aguentam o tranco por muito tempo. Além do mais, é sempre complicado se desfazer de um, porque em geral macmaníacos tem uma relação quase afetiva com suas máquinas (essa relação inclusive salvou a Apple muitas vezes...). Em casa, tudo começou com um &lt;a href="http://www.lowendmac.com/compact/se.shtml"&gt;Mac SE&lt;/a&gt; , em 1989. Na época, tínhamos mouse e interface gráfica enquanto boa parte do mundo usava o DOS. Depois, tivemos um &lt;a href="http://www.lowendmac.com/ppc/6300.shtml"&gt;Performa 6300&lt;/a&gt;, que na época (1994) já estava ficando fora de linha. Também tivemos dois laptops: um &lt;a href="http://www.lowendmac.com/pb/140.shtml"&gt;PowerBook 140&lt;/a&gt; e um &lt;a href="http://www.lowendmac.com/pb2/5300.shtml"&gt;PowerBook 5300&lt;/a&gt;. Hoje temos um iMac G3 e dois iBooks, e em breve, um MacBookPro. &lt;br/&gt;Os laptops mais antigos jáo não existem mais, mas aguentaram o tranco quase 8 anos. Já o Performa e o SE estão firmes e fortes em casa. Obviamente, os softwares de hoje não podem ser executados nessas máquinas, mas elas ainda podem servir para coisas como terminal internet, jogos clássicos, editor simples de texto, ou até mesmo avançado (caso use programas como Latex), bases de dados para o dia a dia....tudo depende das características da máquina e do dono. Foi com o intuito de tentar recuperar algumas dessas máquinas que eu descobri um site bem interessante, o &lt;a href="http://www.lowendmac.com/"&gt;Low End Mac&lt;/a&gt;, que contém uma lista de todos os modelos de Macs, com características técnicas e upgrades possíveis, fabricantes e lojas de hardware onde é possível encontrar material, além de artigos e forum de trocas e vendas de máquinas. Foi lá que eu descobri entre outras coisas que era possível fazer upgrade do processador do meu iMac (que eu fiz, prolongando bastante sua vida realmente útil) e do SE, e também encontrei uma loja que vende memória para o SE ($1 dolar o pente) e um fabricante que faz leitor de DVD embutido para meu iMac. &lt;br/&gt;&lt;br/&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/19831061-114320356155192781?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/114320356155192781/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=114320356155192781' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/114320356155192781'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/114320356155192781'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2006/03/vida-longa-para-os-macs.html' title='Vida longa para os Macs'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-114254480543731042</id><published>2006-03-16T18:33:00.000-03:00</published><updated>2006-03-16T18:33:25.446-03:00</updated><title type='text'>Windows XP no Mac</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Desde o lançamento dos novos Macs rodando processador Intel, duas grandes dúvidas pairaram no ar: será possível rodar Windows no Mac e Mac OS X em PCs ? (outras dúvidas ficaram no ar, mas para este post, estas duas são suficientes). Bom, a segunda dúvida acho que ainda não foi respondida...mas caso não tenham encontrado uma maneira de rdar Mac OS X em PCs, acho queé uma questão de tempo. A segunda foi respondida esta semana. &lt;br/&gt;&lt;br/&gt;Um usuário de Mac chamado Colin Nederkoorn propôs oferecer dinheiro a quem encontrasse uma forma de rodar Windows XP em um MacIntel, sendo que o requisito básico é que a solução encontrada permitisse um verdadeiro sistema de dual-boot na máquina. A oferta inicial era de $100, mas Nederkon criou um sistema de doações que permitiu que o prêmio chegasse a quase 14000 dólares. &lt;br/&gt;&lt;br/&gt;Uma dupla da california bolou uma solução, que foi testada por grupos diferentes de pessoas em Macs Mini, iMac e MacBookPro. Aparentemente a solução consiste em criar uma cópia customizada do CD de instalação do Windows. &lt;br/&gt;Mas infelizmente, a notícia tá fazendo tanto sucesso que é impossível acessar os sites oficiais do concurso com a solução (aliás, ta fazendo sucesso exatamente neste momento, porque eu consegui acessar o site com as regras do concurso a duas horas atrás). Por favor, quem encontrar a receita, entre em contato.&lt;br/&gt;&lt;br/&gt;A ZDNet publicou uma entrevista com Nederkoorn, que pode ser lida &lt;a href="http://news.zdnet.com/2100-3513_22-6050524.html"&gt;aqui.&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;E agora a pergunta que não quer calar: será que eu vou conseguir rodar o Flight Simulator 2004 no meu futuro MacBookPro ? Quem viver verá !&lt;br/&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/19831061-114254480543731042?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/114254480543731042/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=114254480543731042' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/114254480543731042'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/114254480543731042'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2006/03/windows-xp-no-mac.html' title='Windows XP no Mac'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-114244107899735618</id><published>2006-03-15T13:44:00.000-03:00</published><updated>2006-03-15T13:44:39.006-03:00</updated><title type='text'>Google bombing na Casa Branca</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Não sei se quando você estiver lendo este post, o resultado apresentado aqui vai ser válido ainda...mas:&lt;br/&gt;&lt;br/&gt;Abra seu navegador preferido, vá para google.com e digite Failure na caixa de busca. Veja qual o primeiro link encontrado :-) Esse lance de Googlebombing pode produzir resultados loucos.&lt;br/&gt;&lt;br/&gt;E o mais legal: nos links patrocinados (à direita da tela), o primeiro endereço é de uma página do blog oficial do Google, justificando o acontecido.&lt;br/&gt;&lt;br/&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/19831061-114244107899735618?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/114244107899735618/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=114244107899735618' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/114244107899735618'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/114244107899735618'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2006/03/google-bombing-na-casa-branca.html' title='Google bombing na Casa Branca'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-114243342810366771</id><published>2006-03-15T11:37:00.000-03:00</published><updated>2006-03-15T11:37:08.126-03:00</updated><title type='text'>Frase do dia</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;i&gt;&lt;font size="3"&gt;"Deus só criou o mundo em 7 dias, pq não tinha sistema legado pra mexer"&lt;br/&gt;&lt;br/&gt;&lt;/font&gt;&lt;/i&gt;(Da sabedoria popular, ou de autor desconhecido. Credito temporariamente ao Leonardo, mas preciso verificar)&lt;br/&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/19831061-114243342810366771?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/114243342810366771/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=114243342810366771' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/114243342810366771'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/114243342810366771'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2006/03/frase-do-dia.html' title='Frase do dia'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-114191061905558311</id><published>2006-03-09T10:23:00.000-03:00</published><updated>2006-03-10T17:28:28.416-03:00</updated><title type='text'>Falando em usabilidade</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Aproveitando o tópico anterior sobre usabilidade, deixo aqui uma pergunta, porque perguntar não ofende: quem foi o engenheiro espertão da Microsoft que achou que era uma boa idéia traduzir atalhos do Office ??????? Eu penso absurdos da mãe dele sempre que eu faço &lt;b&gt;Ctrl + S&lt;/b&gt; pra salvar um documento no Office aqui do trabalho, que é em português, e me aparece uma palavra &lt;b&gt;sublinhada&lt;/b&gt;. Mais legal foi quando abri um Office em alemão e não consegui fazer absolutamente nada.&lt;br/&gt;&lt;br/&gt;Porque até onde eu sei, atalhos são feitos pra &lt;i&gt;heavy user&lt;/i&gt; poder ser mais produtivo no seu trabalho. E me corrijam se eu estiver errado, mas uma vez que você conhece os atalhos, não importa se você sabe a palavra que deu origem à letrinha que vem após o Ctrl, você simplesmente usa ! &lt;br/&gt;&lt;br/&gt;E para aqueles que disserem que é mais intuitivo o atalho ter alguma coisa a ver com a língua do pacote, pergunto: qual seria a palavra que deu origem ao B, de &lt;b&gt;Ctrl+B&lt;/b&gt;, que no Office em português executa a ação &lt;b&gt;Salvar arquivo&lt;/b&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/19831061-114191061905558311?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/114191061905558311/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=114191061905558311' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/114191061905558311'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/114191061905558311'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2006/03/falando-em-usabilidade.html' title='Falando em usabilidade'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-114185030549197865</id><published>2006-03-08T17:38:00.000-03:00</published><updated>2006-03-08T17:41:30.316-03:00</updated><title type='text'>Construindo interfaces</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;É notório e sabido que hackers e programadores em geral odeiam pensar em interfaces, e acham isto absolutamente inútil. Afinal, é muito mais divertido manipular as coisas na raça...e de qualquer forma, nenhuma interface é complicado para experts......

Apesar de não concordar 100% com isso, assumo que muitas vezes abro mão de interfaces gráficas bonitinhas para mexer em arquivos tenebrosos. Sobretudo quando tenho que configurar uma máquina com Linux.

Mas o fato e que, por sorte, 99.9% das pessoas não são hackers, e nem ao menos tem intimidade com computador &lt;b&gt;[nda: essa porcentagem é completamente fictícia e saiu da minha cabeça, mas serve pra ilustrar o fato que a maioria das pessoas não são hackers]&lt;/b&gt; . E ao usar um software, a maioria das pessoas não irão ficar impressionadas se o seu algoritmo é recursivo, roda em O(n), ou usando apenas um loop &lt;b&gt;[nda: se você entendeu o que eu escrevi agora, não tem dúvida: você é geek :-)]&lt;/b&gt;. Interface gráfica, para quem desenvolve softwares comerciais desktop, web, para palm, celular e qualquer outro dispositvo gráfico, é crucial. Eu encaro interfaces como encaro engenharia de software: deve ser um porre de se pesquisar e estudar, mas são ferramentas essenciais para qualquer bom programador comercial.

Encontrei hoje um &lt;a href="http://www.joelonsoftware.com/uibook/chapters/fog0000000057.html"&gt;artigo&lt;/a&gt; do &lt;a href="http://www.joelonsoftware.com/"&gt;Joel Spolsky&lt;/a&gt; bastante longo (9 capítulos), mas bem interessante e agradável de se ler, sobre princípios básicos que devem ser utilizados para se construir uma boa interface gráfica. É basicamente um resumo de um curso universitário de IHC. Vale a pena dar uma olhada.

/&amp;gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19831061-114185030549197865?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/114185030549197865/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=114185030549197865' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/114185030549197865'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/114185030549197865'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2006/03/construindo-interfaces.html' title='Construindo interfaces'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-114176587378861374</id><published>2006-03-07T18:11:00.000-03:00</published><updated>2006-03-07T18:11:13.800-03:00</updated><title type='text'>Voltando das férias</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Após 3 semanas de férias, ainda não entrei no ritmo de trabalho e meu lado geek tá meio fraco e enferrujado :-) Mas só pra retomar o hábito de escrever aqui, segue o link de um artigo que eu achei interessante do &lt;a href="http://www.joelonsoftware.com/"&gt;Joel Spolsky&lt;/a&gt; sobre o problema de precificar softwares. Ele trás bons elementos para pensar no problema. Provavelmente quem já fez um curso de economia, mercado e coisas correlatas irá achar inútil. Mas eu não fiz nenhum curso desses....ou melhor, fiz, mas não de uma forma que pudesse render frutos mais tarde. If you know what I mean.&lt;br/&gt;&lt;br/&gt;Para ler o artigo, clique &lt;a href="http://www.joelonsoftware.com/printerFriendly/articles/CamelsandRubberDuckies.html"&gt;&lt;b&gt;aqui&lt;/b&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&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/19831061-114176587378861374?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/114176587378861374/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=114176587378861374' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/114176587378861374'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/114176587378861374'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2006/03/voltando-das-frias.html' title='Voltando das férias'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-113960376739657634</id><published>2006-02-10T18:35:00.000-02:00</published><updated>2006-02-10T18:36:07.416-02:00</updated><title type='text'>Ferias</title><content type='html'>O autor deste blog está de férias e volta dia 28/02. Favor deixar um recado após o bip.

bip.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19831061-113960376739657634?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/113960376739657634/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=113960376739657634' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113960376739657634'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113960376739657634'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2006/02/ferias.html' title='Ferias'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-113949652772173887</id><published>2006-02-09T12:48:00.000-02:00</published><updated>2006-02-09T12:48:47.733-02:00</updated><title type='text'>Yes..nós temos SkipeIn.</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;SkypeIn agora está disponível no Brasil. Receber ligações de telefones no próprio computador agora é possível.&lt;br/&gt;&lt;i&gt; /&amp;gt;"Lucky Brazilians get SkypeIn before the Canadians. Those north of the
border will be ..... So now you can add that Rio number. Brazil is big
with Skype and Orkut a social networking service. Rates for SkypeIn
match the global rates. The only werid thing is "terms and conditions"
are only in English. Shouldn't there be a translation?"&lt;/i&gt;&lt;br/&gt;&lt;br/&gt;Cito a revita &lt;a href="http://www.magnet.pro.br/mercado/skypein-brasil-20060201"&gt;&lt;i&gt;Magnet:&lt;/i&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;i&gt;"Agora o SkypeIn está disponível para o público brasileiro, mais uma
oportunidade de integrar quem não tem computador a quem utiliza o Skype
através de um número telefônico.&lt;/i&gt;
&lt;p&gt;&lt;i&gt;você ligue para qualquer telefone no mundo através do computador, no
SkypeIn você não pagará as ligações através de crédito. Você na
realidade faz uma assinatura trimestral ou anual e ganha um número na
cidade escolhida.&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;De acordo com a conveniência do usuário, ele pode escolher seu
número a partir de uma série de combinações, para pegar o que for mais
fácil de decorar. O serviço está sendo oferecido em parceria com a &lt;span class="link-external"&gt;&lt;a href="http://www.transitbrasil.com.br/"&gt;TransitTelecom&lt;/a&gt;&lt;/span&gt;
e através dele você pode comprar números em Belo Horizonte, Campinas,
Caxias do Sul, Curitiba, Joinville, Porto Alegre, Rio de Janeiro,
Santos, São José dos Campos e São Paulo.&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;O plano trimestral custa 10 euros (aproximadamente R$ 27), enquanto
o anual sai por 30 euros (cerca de R$ 80). Cada usuário de Skype pode
ter até 10 números de telefone SkypeIn atrelados a ele."&lt;/i&gt;&lt;/p&gt;&lt;br/&gt;&lt;br/&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/19831061-113949652772173887?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/113949652772173887/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=113949652772173887' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113949652772173887'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113949652772173887'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2006/02/yesns-temos-skipein.html' title='Yes..nós temos SkipeIn.'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-113940294061342538</id><published>2006-02-08T10:47:00.000-02:00</published><updated>2006-02-08T10:49:00.633-02:00</updated><title type='text'>Formação contínua</title><content type='html'>Suponha que você acabou de se formar em um curso superior de computação, já saiba programar em uma ou mais linguagens, tenha bons conhecimentos de algoritmos e está no mercado de trabalho, ganhando um salário interessante. Terminou por aí a fase de aprendizagem ? Não...está apenas começando.

É interessante pensar que no mundo de tecnologia, as coisas se renovam de forma muito rápida. De repente novas tecnologias surgem, criam moda, algumas desaparecem, outras ficam....só para citar alguns exemplos de novas linguagens e tecnologias que começaram a fazer sucesso recentemente: Ruby, Lua, AJAX, Python....

Bom, mas até aqui, não falei nada de novo. O ponto importante é: como aprender coisas novas continuamente ? Não tenho a pretenção de querer ditar regras, ou falar o que é certo ou errado. So gostaria de dizer como eu acho que seria ideal.

Participando de foruns de discussão, lendo matérias sobre tecnologia, e conversando com colegas de trabalho, percebo que muitas vezes se espera adquirir conhecimentos apenas fazendo cursos. E isso muitas vezes é usado como forma de justificar a falta de conhecimento ("não me pagaram o curso então não sei...", ou então "na minha faculdade não tive curso de tal linguagem...").

É muito comum também que a primeira ação a ser tomada quando não se sabe algo é ir perguntar diretamente para outras pessoas, seja via forum, seja via email, seja diretamente, sem que seja feita qualquer tipo de pesquisa prévia para tentar resolver o problema.

Notem: não estou dizendo que fazer cursos ou que falar com pessoas que saibam sobre um determinado assunto seja ruim. Muito pelo contrário. Uma das grandes forças do movimento de software livre são as listas e foruns de discussão, e a facilidade com que se consegue trocar idéias com pessoas. E cursos são ótimos para consolidar certos conhecimentos, desde que bem ministrados. O que estou dizendo é que em geral, existe a tendência de transferir para outros a incumbência de nos ensinar as coisas, sendo que muitas vezes, deveríamos aprender sozinhos (ou pelo menos iniciar o aprendizado sozinho).

A palavra importante que resume tudo isso é próatividade. Hoje em dia, temos a grande sorte de termos à nossa disposição uma fonte de informações quase inesgotável chamada &lt;b&gt;Internet&lt;/b&gt;, e uma ferramenta imprescindível para encontrar informações nessa fonte chamada &lt;b&gt;Google&lt;/b&gt;. Com isso e boas palavras chaves em mãos, é possível (quase) encontrar quase tudo. É verdade que a Internet é meio caótica, e é preciso separar o joio do trigo na hora de buscar informações necessárias (por isso também com o tempo é interessante montar uma coleção de sites e fontes de informações confiáveis), mas com um pouco de paciência e prática, pode se encontrar muita coisa útil.

E mesmo assim, muitas vezes perguntas são feitas sem nenhum tipo de pesquisa.

Exemplo: No ano passado, fui monitor de uma matéria onde se aprende os fundamentos básicos de LISP, PROLOG e JAVA para comparação e estudo de paradigmas diferentes de programação. Um dia, um dos alunos veio com um código em Lisp, dizendo que não estava conseguindo executar o programa. Abri uma shell, executei o clisp, carreguei o programa e mandei executar: erro na primeira linha. Corrigi o erro e mandei executar de novo: erro na segunda linha. Repeti a operação: erro na terceira. Neste momento, descobri que o aluno não tinha rodado nenhuma vez sequer o código, e pior: não tinha nem revisado ! Obviamente mandei ele pra casa testar tudo de novo e corrigir...

Outro exemplo: há algum tempo atrás, quando participava ativamente de um sistema colaborativo de perguntas e respostas, recebi uma pergunta bastante simples sobre java. Fiz uma busca no google usando as palavras que apareciam no email, e retornei os 3 primeiros sites que apareceram no google, todos muito interessantes (dei uma olhada prévia pra ver se tinham informações úteis), junto com informações sobre a busca que havia feito. Dois dias depois, recebo um email da mesma pessoa, perguntando se eu não tinha nenhuma referência em português...

Conselho: faça pesquisas antes de sair perguntando....muitas vezes, a resposta é obtida de forma fácil. Além do mais, fóruns de discussão devem ser usados apenas para obter pontos de partida, direções a serem seguidas....não espere respostas mastigadas...raramente serão obtidas. Sem contar que dependendo do assunto, poucas pessoas terão condições de saber tudo. Last but not least: ser computeiro, ou trabalhar com tecnologia, sem saber um mínimo de inglês (pelo menos para leitura), não dá !&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19831061-113940294061342538?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/113940294061342538/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=113940294061342538' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113940294061342538'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113940294061342538'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2006/02/formao-contnua.html' title='Formação contínua'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-113932307730107464</id><published>2006-02-07T12:37:00.000-02:00</published><updated>2006-02-07T12:37:57.360-02:00</updated><title type='text'>Reuso de código....mal feito</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;O vôo transcorria normalmente...o helicóptero de guerra parecia ser muito eficiente nas manobras....o piloto estava apreciando as paisagens australianas. De repente ao longe, o piloto observa uma manada de kangurus (é manada mesmo?). Resolve fazer um rasante para poder admirar de perto esses animais exóticos. Como esperado, os kangurus se assutam com o helicóptero, e correm (ou pulam) para detrás de um morro.&lt;br/&gt;&lt;br/&gt;Até aí, tudo normal.&lt;br/&gt;&lt;br/&gt;De repente, um grupo de kangurus fortemente armados surge das montanhas e atiram um míssil contra o helicóptero, que explode !!!!!!!!!!!!!!!!!!!!!!!!&lt;br/&gt;&lt;br/&gt;Ficção científica ? Não...erro de programação. Este episódio aconteceu durante uma apresentação de um simulador de vôo australiano para pilotos americanos. O erro: ao desenvolver o simulador, o programador utilizou a mesma biblioteca de geração de soldados virtuais para gerar os kangurus, mudando apenas o skin ! O único problema foi que o programador esqueceu de desabilitar a opção de artilharia e os reflexos de soldado.&lt;br/&gt;&lt;br/&gt;A descrição deste fato pode ser lida &lt;a href="http://everything2.com/index.pl?node_id=783722"&gt;aqui&lt;/a&gt;&lt;br/&gt;&lt;br/&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/19831061-113932307730107464?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/113932307730107464/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=113932307730107464' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113932307730107464'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113932307730107464'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2006/02/reuso-de-cdigomal-feito.html' title='Reuso de código....mal feito'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-113896703637059751</id><published>2006-02-03T09:43:00.000-02:00</published><updated>2006-02-03T09:43:56.386-02:00</updated><title type='text'>Python no Google</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Esse &lt;a href="http://panela.blog-city.com/python_at_google_greg_stein__sdforum.htm"&gt;post&lt;/a&gt; faz um pequeno resumo de uma paletra no SDForun de um engenheiro da Google, &lt;a href="http://www.lyra.org/greg/"&gt;Greg Stein&lt;/a&gt;, que falou sobre o uso de Python dentro da própria Google. É interessante para matar um pouco a curiosidade de como as coisas funcionam por lá....&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/19831061-113896703637059751?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/113896703637059751/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=113896703637059751' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113896703637059751'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113896703637059751'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2006/02/python-no-google.html' title='Python no Google'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-113896688967757643</id><published>2006-02-03T09:41:00.000-02:00</published><updated>2006-02-03T09:41:29.693-02:00</updated><title type='text'>Sobre engenheiros e administradores</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Eu já ouvi algumas versões dessa piada...é relativamente velha....mas aproveito que por acaso eu caí numa versão dela, pra transcrever o texto:&lt;br/&gt;&lt;br/&gt;&lt;i&gt;A man is flying in a hot air balloon and realizes he is lost. He reduces height and spots a man down below. He lowers the balloon further and shouts: "Excuse me, can you help me? I promised my friend I would meet him half an hour ago, but I don't know where I am." &lt;br/&gt;&lt;br/&gt;The man below says: "Yes. You are in a hot air balloon, hovering approximately 30 feet above this field. You are between 40 and 42 degrees N. latitude, and between 58 and 60 degrees W. longitude." &lt;br/&gt;&lt;br/&gt;"You must be an engineer" says the balloonist. &lt;br/&gt;&lt;br/&gt;"I am" replies the man. "How did you know." &lt;br/&gt;&lt;br/&gt;"Well" says the balloonist, "everything you have told me is technically correct, but I have no idea what to make of your information, and the fact is I am still lost." &lt;br/&gt;&lt;br/&gt;The man below says "You must be a manager." &lt;br/&gt;&lt;br/&gt;"I am" replies the balloonist, "but how did you know?" &lt;br/&gt;&lt;br/&gt;"Well", says the man, "you don't know where you are, or where you are going. You have made a promise which you have no idea how to keep, and you expect me to solve your problem. The fact is you are in the exact same position you were in before we met, but now it is somehow my fault.&lt;/i&gt;       &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19831061-113896688967757643?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/113896688967757643/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=113896688967757643' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113896688967757643'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113896688967757643'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2006/02/sobre-engenheiros-e-administradores.html' title='Sobre engenheiros e administradores'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-113872088685414294</id><published>2006-01-31T13:21:00.000-02:00</published><updated>2006-01-31T13:21:27.326-02:00</updated><title type='text'>Tirando agua de pedra</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;div align="justify"&gt;...ou como extrair informações de um cliente para fazer a especificação de um software.&lt;br/&gt;&lt;br/&gt;Recebi esta &lt;a href="http://www.dilbert.com/comics/dilbert/archive/dilbert-20060129.html"&gt;tira do Dilbert&lt;/a&gt; hoje de manhã, e ela tem tudo a ver com alguns problemas de especificação de software que estou vivendo atualmente. Conseguir extrair informações sobre o negócio de um cliente é uma arte, que requer tempo, perícia e uma boa dose de calma. O grande problema é que pessoas normais (em oposição a desenvolvedores) não conseguem entender o mundo virtual que um software constrói, não entende implicações de decisões erradas de design, e sobretudo nem sempre consegue definir quais são as informações importantes para o design, e quais são totalmente superfluas. E são esses pequenos detalhes esquecidos que em geral irão causar redesign, refactoring, e portanto atraso.&lt;br/&gt;&lt;br/&gt;&lt;b&gt;Exemplo prático:&lt;/b&gt; ontem, por acaso, descobri que um atributo que eu acreditava estar ligado a uma entidade entidade na verdade era ligada a outra entidade. &lt;b&gt;Detalhe:&lt;/b&gt; a questão das entidades foi discutida milhõs de vezes, e o cliente aprovou um documento que explicitava as entidades e seus atributos. &lt;b&gt;Resultado: &lt;/b&gt; mudar o atributo de uma tabela de BD para outra é muito simples....o problema é modificar queries, objetos, e validar tudo de novo. No meu caso, 2 dias perdidos praticamente.&lt;br/&gt;&lt;br/&gt;O fato é que não se pode esperar que o cliente vá falar sobre tudo sozinho, e de preferência, não se deve pedir pro cliente descrever o seu negócio com a ótica do software a ser produzido...inevitavelmente, ele irá colocar filtros nas informações que em geral não são desejáveis. Quem deve delimitar o escopo do software e as informações realmente relevantes é o desenvolvedor, obviamente com base nas informações do cliente.&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/19831061-113872088685414294?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/113872088685414294/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=113872088685414294' title='5 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113872088685414294'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113872088685414294'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2006/01/tirando-agua-de-pedra.html' title='Tirando agua de pedra'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-113858403904718638</id><published>2006-01-29T22:43:00.000-02:00</published><updated>2006-01-30T09:37:01.973-02:00</updated><title type='text'>Sobre a atividade de programar</title><content type='html'>&lt;div style="text-align: justify;"&gt;Antes de começar, gostaria de contar dois fatos que considero ilustrativos :

Primeiro caso: Há alguns meses atrás, esta conversando com uma pessoa que se auto denominava programador. Lá pelas tantas, eu perguntei  quais as linguagens que ele programava e como era o curso dele. A resposta foi mais ou menos assim: "bom, lá na faculdade, primeiro a gente aprendeu lógica de programação em C++...era aquela tela azul, sem nenhum recurso...só na lógica. Depois aprendi lógica de programação em Delphi...era mais simples, com botões para fazer interfaces..."

Segundo caso: há alguns dias, encontrei na casa de um amigo um curso rápido de Delphi, bastante antigo. Na introdução, após descrever em um parágrafo de 3 linhas a história do delphi (algo do gênero "criaram uma linguagem chamada pascal, e o delphi é a evolução do pascal...". Curto, sucinto, e absolutamente inútil), tinha a seguinte frase: "Abra a pasta X, execute o Delphi, e você estará pronto para iniciar sua carreira de programador".
&lt;span class="on" style="display: block;" id="formatbar_JustifyFull" title="Justify Full" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 13);ButtonMouseDown(this);"&gt;&lt;/span&gt;
Fato: boa parte dos programadores que existem por aí só veem a ferramenta, e desconhecem que existe um mundo bem maior, mais importante por trás. E sobretudo não conseguem conceber o fato que a linguagem de programação é um detalhe...importante, mas apenas um detalhe.

Mexer numa IDE é facil, sobretudo se for uma IDE gráfica, estilo Delphi, Visual Basic ou Visual Studio. Entender os controles básicos de programação como if, for, while e outros também. Com um pouco de boa vontade, qualquer um pode fazer programinhas simples com interface gráfica e tudo mais.

Mas isto é a ponta do iceberg. Mexer em IDE não é programar. Saber todas as bibliotecas de uma linguagem de programação não é saber programar. Assim como saber digitar em máquina de escrever não significa saber escrever. Programar é algo bem mais complexo: significa entender o funcionamento de processadores, memória, algoritmos, estruturas de dados, estrutura de arquivos, protocolos, patterns, paradigmas de programação. A linguagem de programação é a ferramenta para descrever um programa para a máquina, mas um bom desenvolvedor/programador tem que ser capaz de pensar num programa como um conjunto de instruções que executem uma tarefa definida sem se preocupar com  a linguagem de programação.
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19831061-113858403904718638?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/113858403904718638/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=113858403904718638' title='4 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113858403904718638'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113858403904718638'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2006/01/sobre-atividade-de-programar.html' title='Sobre a atividade de programar'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-113836150054854241</id><published>2006-01-27T09:31:00.000-02:00</published><updated>2006-01-27T09:31:40.563-02:00</updated><title type='text'>A primeira linguagem de programação a gente nunca esquece</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;O pergunta "Qual linguagem a linguagem mais apropriada para ensinar os fundamento de programação em um curso ce computação?" é um tópico de intensas discussões.Os quesitos técnicos se misturam a preferências pessoais, e a partir deste momento, a coisa pode ir longe (basta tomar como exemplo a famosa discussão de quem é melhor: Emacs ou VI...eu prefiro Emacs, simplesmente porque não posso conceber escrever em um editor de texto do qual eu nunca lembro o comando pra modo de edição e pra sair).&lt;br/&gt;&lt;br/&gt;O artigo &lt;a href="http://www.ariel.com.au/a/teaching-programming.html"&gt;&lt;b&gt;A Very Quick Comparison of Popular Langauges for Teaching Computer Programming&lt;/b&gt;&lt;/a&gt; faz uma pequena comparação entre Basic, C, Java e Python, mostrando pros e contras de cada linguagem para para aprendizagem de programação. No final, como era de se esperar, ele escolhe Python.&lt;br/&gt;&lt;br/&gt;Os argumento do artigo são válidos, e de fato Python parece um bom exemplo. Minha única crítica é que ele esqueceu de citar uma linguagem que serviu de modelo de aprendizagem para muita gente, e que inclusive foi desenvolvida com esta finalidade: PASCAL (linguagem que foi utilizada na minha graduação para aprender programação). Mas provavelmente, ele diria que PASCAL já é uma linguagem antiga, sem alguns recursos que linguagens modernas oferecem.&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/19831061-113836150054854241?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/113836150054854241/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=113836150054854241' title='3 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113836150054854241'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113836150054854241'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2006/01/primeira-linguagem-de-programao-gente.html' title='A primeira linguagem de programação a gente nunca esquece'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-113811860350298818</id><published>2006-01-24T14:03:00.000-02:00</published><updated>2006-01-24T14:03:23.813-02:00</updated><title type='text'>FireBug - Ferramenta profiça para debug em Firefox</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;O slogan da página diz tudo: &lt;i&gt;&lt;b&gt;Its not your grandma's Javascript Console.&lt;/b&gt;&lt;/i&gt; A extensão &lt;a href="http://www.joehewitt.com/software/firebug/"&gt;FireBug&lt;/a&gt; fornece ferramentas bem interessantes para análise de páginas, javascripts e afins. Usada em conjunto com as funções de análise de CSS do WebDevelopper, temos uma IDE completa.&lt;br/&gt;&lt;br/&gt;Vale ressaltar a função que permite bisbilhotar as conexões assíncronas via &lt;b&gt;HTTPXMLRequest&lt;/b&gt;, o coração do &lt;b&gt;AJAX&lt;/b&gt;. Esta extensão registra quando uma chamada assíncrona foi feita, quem executou a chamada, e o melhor de tudo: imprime o XML de retorno !!!!! Eliminamos a necessidade de ficar imprimindo informações no servidor ou ter que gerar javascript extra para exibir o conteúdo de retorno.&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/19831061-113811860350298818?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/113811860350298818/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=113811860350298818' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113811860350298818'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113811860350298818'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2006/01/firebug-ferramenta-profia-para-debug.html' title='FireBug - Ferramenta profiça para debug em Firefox'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-113805212092263808</id><published>2006-01-23T19:35:00.000-02:00</published><updated>2006-01-23T19:35:20.986-02:00</updated><title type='text'>Graficos em JSP com Cewolf</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Num tópico anterior, eu falei sobre a biblioteca JFreeChart para criação de gráficos, e mencionei uma taglib chamada &lt;a href="http://cewolf.sourceforge.net/new/index.html"&gt;Cewolf&lt;/a&gt; para inserir gráficos gerados pela JFreeChart em páginas JSP. Na época não havia utilizado a taglib em questão..mas nos últimos dias usei bastante, portanto me sinto no dever de relatar a experiência.&lt;br/&gt;&lt;br/&gt;A biblotece fornece tags que encapsulam o processo de criação de gráficos usando JFreechart. A idéia é boa, porque JFreeChart gera uma grande quantidade de gráficos muito bonitos, e a documentação não está disponível, tornando sua utilização um pouco mais trabalhosa, sobretudo quando os prazos de seu software estão estourando a muito tempo. Para funcionar, é necessário instalar bibliotecas para manipulação de SVG, e XML, além obviamente do próprio JFreechart.&lt;br/&gt;&lt;br/&gt;No site, tem um passo a passo bem legal, que permite que em poucos minutos se tenha um demo com gráfico na sua aplicação. A geração de dados é bastante simples, e requer apenas algumas linhas de código para obter os dados e converte-los no formato adequado. A taglib permite também gerar tooltips para os pontos do gráfico, e criar um mapa de links, fazendo com que o gráfico tenha funções de hipertexto, o que pode ser muito útil em alguns casos.&lt;br/&gt;&lt;br/&gt;Porém, nem tudo são flores.....&lt;br/&gt;&lt;br/&gt;O primeiro problema (que não é realmente um problema, mas sim uma restrição) é que nem todos os tipos de gráficos do JFreeChart estão disponíveis no Cewolf. Até que me provem o contrário, isto é pura preguiça. Mas talvez existam motivos mais nobres. Mas tudo bem, os principais tipos estão contemplados.&lt;br/&gt;&lt;br/&gt;O segundo problema, um pouco mais chato, é que a parte de geração dos dados, que deve ser implementada pelo usuário, requer algun conhecimento mínimo do JFreeChart. Portanto, algumas visitas à API da biblioteca são necessárias.&lt;br/&gt;&lt;br/&gt;O terceiro (e principal problema) é, pra variar um pouco, documentação. Como todo softwarte livre, ela é problemática. Mas neste caso, tem um agravante: a pouca documentação que existe no site está&lt;span style="font-weight: bold;"&gt; ERRADA&lt;/span&gt; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!&lt;br/&gt;O site contém a API das taglibs, com informações sobre as tags, parâmetros possíveis e valores aceitos para cada parâmetro. Com exceção de alguns parâmetros que se mantém, a impressão que tive é que a documentação está defasada em relação à biblioteca. No meu caso, só não se tornou um pesadelo porque os comentários dentro do descritor da taglib estão corretos, e estes comentários são lidos pelo eclipse e exibidos como documentação, e eu uso eclipse, e assim por diante....&lt;br/&gt;&lt;br/&gt;Assim sendo:&lt;br/&gt;&lt;br/&gt;Nota final: 10 pela idéia, 6 pela implementação, 0 pra documentação. Média 5 e alguma coisa.&lt;br/&gt;&lt;br/&gt;No final das contas, vale a pena dar uma olhada, porque ainda acho que enfiar gráficos dinâmicos a seco deve ser mais trabalhoso.&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/19831061-113805212092263808?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/113805212092263808/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=113805212092263808' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113805212092263808'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113805212092263808'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2006/01/graficos-em-jsp-com-cewolf.html' title='Graficos em JSP com Cewolf'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-113759806824387741</id><published>2006-01-18T13:27:00.000-02:00</published><updated>2006-01-18T13:27:48.310-02:00</updated><title type='text'>Mandriva e HP na América Latina</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Saiu no site de notícias francês &lt;a href="http://www.vnunet.fr/actualite/tpepme_-_business/strategies_et_marches/20060118002"&gt;VNUnet.fr&lt;/a&gt;: a Mandriva (Ex MandrakeSoft, que fusionou com a Conectiva), fechou um acordo com a HP para distribuir computadores Desktop'com a distribuição de Linux Mandriva pré instalados em 37 países da América do Sul à partir de 2006. O acordo prevê a validação dos produtos da Mandriva nas máquinas HP, e trabalho conjunto de marketing e suporte técnico. Um release em inglês no site da Mandrive (&lt;a href="http://wwwnew.mandriva.com/en/company/press/pr/mandriva_hp_launch_new_linux_pre_loaded_computers_in_latin_america"&gt;Mandriva HP launch new Linux pre-loaded computers in Latin America&lt;/a&gt;) fornece mais detalhes sobre a operação.&lt;br/&gt;&lt;br/&gt;Depois da evolução das interfaces gráficas e do desenvolvimento de pacotes office compatíveis com windows, este é mais um passo vital para permitir que o Linux ganhe espaço nos desktops. Quem já instalou linux, sobretudo em laptops, sabe que deixar TUDO funcionando é em geral trabalhoso, apesar do grande avanço dos instaladores para Linux. Além do mais, pessoas comuns, normais, qua nunca instalaram um sistema operacional na vida, nunca irão optar por linux se as máquinas compradas nas lojas já vem com um Windows XP pré instalado e configurado.&lt;br/&gt;&lt;br/&gt; &lt;blockquote/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19831061-113759806824387741?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/113759806824387741/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=113759806824387741' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113759806824387741'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113759806824387741'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2006/01/mandriva-e-hp-na-amrica-latina.html' title='Mandriva e HP na América Latina'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-113753249077897171</id><published>2006-01-17T19:14:00.000-02:00</published><updated>2006-01-17T19:14:50.923-02:00</updated><title type='text'>Go Firefox !</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;br/&gt;&lt;a href="http://arstechnica.com/news.ars/post/20060117-5995.html"&gt;Firefox hits 20 percent mark in Europe&lt;/a&gt; &lt;br/&gt; &lt;blockquote&gt;
Dados medidos pela empresa XiTi mostram que em média 20% de europeus utilizam o navegador Firefox, com destaque para França, Slovenia e Alemanha, com mais de 30% de uso. A matéria do Ars ressalta o fato que a última medição foi efetuada num domingo, o que torna a pesquisa menos confiável. De fato, a maioria das empresas usa IE, e como no domingo ninguém (ou quase ) trabalha, esta massa de usuários ficou de fora.

Doi scomentários devem ser feitos a respeito desta ressalva:

1) Na matéria &lt;a href="http://www.xitimonitor.com/etudes/equipement13.asp?xtor=6"&gt;original da XiTi&lt;/a&gt;
 (em francês), a mesma ressalva é feita. Mas um quadro comparativo mostra que a média de uso do Firefox durante a semana fica apenas levemente abaixo da média do final de semana.

2) O fato que no final de semana a média é maior mostra que usuários dométicos tendem a preferir o Firefox em relação ao IE...

Outro ponto interessante é que a América do Sul e Central é, segundo a XiTi, o continente que menos usa Firefox (5.79% em média, contra 15.88% na América do Norte e 20.11% na Europa).
&lt;/blockquote&gt;

Depois do fracasso do péssimo Netscape 6 e 7, finalmente temos um browser que parece ameaçar o todo poderoso IE. E com muita qualidade.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19831061-113753249077897171?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/113753249077897171/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=113753249077897171' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113753249077897171'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113753249077897171'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2006/01/go-firefox.html' title='Go Firefox !'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-113750299131536979</id><published>2006-01-17T11:03:00.000-02:00</published><updated>2006-01-17T11:03:11.366-02:00</updated><title type='text'>Think Different</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Lendo alguns artigos sobre os novos Macs, caí num artigo falando sobre spots comerciais da Apple. Graças às maravilhas do Hipertexto (também conhecido como link em uma webpage), descobri um site com muito material sobre a Apple...posteres (ou será posters ?), objetos, fotos, e vídeos. (os vídeos podem ser encontratos em &lt;a href="http://www.theapplecollection.com/Collection/AppleMovies/"&gt;The Apple Collection Quicktime Movies @ The Apple Collection&lt;/a&gt; 

Entre os vídeo, dois me chamaram a atenção: um da campanha &lt;a href="http://www.theapplecollection.com/Collection/AppleMovies/mov/thinkdif.html"&gt;Think Different&lt;/a&gt;, e um lançado em &lt;a href="http://www.theapplecollection.com/Collection/AppleMovies/mov/1984_big.html"&gt;1984&lt;/a&gt;, sobre os novos Macs. Vale a pena dar uma olhada.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19831061-113750299131536979?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/113750299131536979/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=113750299131536979' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113750299131536979'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113750299131536979'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2006/01/think-different.html' title='Think Different'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-113742237395719163</id><published>2006-01-16T12:39:00.000-02:00</published><updated>2006-01-16T12:39:34.026-02:00</updated><title type='text'>Portable Apps</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;A algum tempo atrás, o Ricardo me falou sobre este site. Recentemente,
recebi um artigo do Dicas-L falando sobre o mesmo site, portanto acho
que vale a pena comentar aqui.

O site &lt;a href="http://portableapps.com/"&gt;PortableApps.com &lt;/a&gt; disponibiliza vários pacotes de programas conhecidos do mundo OpenSource como Firefox 1.5, Gaim (ICQ, MSN, GoogleTalk, Jabber), Thunderbird e OpenOffice em versões portáteis, que cabem em um PenDrive USB. A idéia dos desenvolvedores é possibilitar que você carregue seus aplicativos favoritos consigo, permitindo roda-los a partir de qualquer computador (desde que o OS seja compatível) com porta USB.

Uma grande vantagem dessa idéia é permitir ter um mini escritório virtual de bolso. Outra vantagem é minimizar problemas de compatibilidade. Por exemplo: se é preciso realizar alguma apresentação em formato OpenOffice Impress, posso garantir que onde quer que eu vá sempre será possível fazer a apresentação, já que além desta, no pen-drive, terei o aplicativo necessário para exibi-la.

Um unico defeito do projeto é que por enquanto, os softwares só são para windows.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19831061-113742237395719163?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/113742237395719163/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=113742237395719163' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113742237395719163'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113742237395719163'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2006/01/portable-apps_16.html' title='Portable Apps'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-113737278399793307</id><published>2006-01-15T22:47:00.000-02:00</published><updated>2006-01-15T22:53:03.996-02:00</updated><title type='text'>Primeiros passos em Python</title><content type='html'>Recentemente comecei a ter um grande interesse por Python. Ainda não escrevi nenhuma linha de código...mas isso é questão de tempo. Por enquanto estou apenas lendo vário artigos sobre.

No site python.org, existe uma boa documentação sobre a linguem, artigos, etc...

Aconselho o artigo &lt;a href="http://www.linuxjournal.com/article/3882"&gt;Why Python,&lt;/a&gt; e um conjunto de artigos comparando Python com outras linguagens. Segue o &lt;a href="http://wiki.python.org/moin/LanguageComparisons"&gt;link&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19831061-113737278399793307?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/113737278399793307/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=113737278399793307' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113737278399793307'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113737278399793307'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2006/01/primeiros-passos-em-python.html' title='Primeiros passos em Python'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-113737242130389460</id><published>2006-01-15T22:12:00.000-02:00</published><updated>2006-01-15T22:47:01.416-02:00</updated><title type='text'>Comentarios sobre AJAX com Struts</title><content type='html'>No inicio do ano passado, a empresa onde trabalho optou por usar o framework Struts para desenvolver aplicações Web. Precisávamos de um modelo MVC de desenvolvimento, e Struts se mostrou uma boa escolha para o tipo e tamanho de projeto que desenvolvemos (desaconselho o uso de struts para aplicações pequenas...).

Struts apresenta alguns pontos interessantes, como mecanismos de verificação de validação de formulários,  tratamento de exceções, internacionalização, mensagens,  e mapeamento de casos de uso, além de  disciplinar o fluxo de funcionamento do sistema.

Recentemente, começamos a usar AJAX para aprimorar as interfaces gráficas, tornando as mais dinamicas e eficientes. Porém, quero ressaltar aqui alguns pontos e problemas que percebi ao integrar AJAX com struts.

Se AJAX é usado apenas pontualmente, para carregar informações que tornem um formulário mais dinâmico, como auto-complete, suggests (mecanismo utilizado pelo Google Suggests), carregar informacoes para caixas de seleção e coisas do genero, então a integração e bem simples: os códigos em Javascript são bem simples, muito parecidos, e o fluxo de validação de formulários em Struts é mantido.

Mas se queremos usar AJAX para funcionalidades mais complexas na página, como validação de formulários, e tratamento complexo de informações, aí começamos a perceber alguns problemas.  AJAX funciona com o modelo de uma página única, com muito código javascript no cliente, e muitas conexões assíncronas..boa parte do processamento passa a ser incumbencia do cliente. A grande vantagem do struts é facilitar o fluxo de validação de dados e exibição de formulários com JSP. Se usamos AJAX para fazer este tipo de tarefa, então perdemos grande parte desses benefícios.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19831061-113737242130389460?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/113737242130389460/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=113737242130389460' title='4 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113737242130389460'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113737242130389460'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2006/01/comentarios-sobre-ajax-com-struts.html' title='Comentarios sobre AJAX com Struts'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-113709842229384907</id><published>2006-01-12T18:40:00.000-02:00</published><updated>2006-01-12T18:40:22.380-02:00</updated><title type='text'>Organizando a vida digital</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Já ouviu falar em &lt;a href="http://www.streamload.com"&gt;Streamload &lt;/a&gt;?&lt;br/&gt;&lt;br/&gt;Se você tem toneladas de fotos, vídeo e áudio digitais e quer disponibilizar para outras pessoas ou simplesmente fazer backup de segurança, então talvez devesse dar uma olhada.&lt;br/&gt;&lt;br/&gt;O Streamload é um serviço que oferece espaço na internet para armazenar e organizar arquivos e possibilita disponibilizar os arquivos para outras pessoas baixarem. Dito assim, à primeira vista o serviço é mais um disco virtual. Não exatamente....exstem alguns diferenciais.&lt;br/&gt;&lt;br/&gt;Escolhendo o pacote gratuíto, o sistema disponibiliza 10GB de espaço para seus arquivos, e 100MB de download por mês (bastante restritivo...mas a idéia é que o modo gratuíto seja um demo). No modo pago, a taxa de download por mês vai de 1GB ($4) até 720GB ($400), e o espaço disponibilzado para armazenar arquivos é &lt;span style="font-weight: bold;"&gt;ilimitado&lt;/span&gt;.&lt;br/&gt;Os arquivos podem ser enviados via um applet java do site que permite upload em batch de até 1GB, via FTP, ou via um aplicativo que pode ser obtido no site gratuitamente.&lt;br/&gt;&lt;br/&gt;Para disponibilizar os arquivos, existem duas formas: via email ou via site. Via email, o sistema gera uma chave temporária que permite que as pessoas que receberam o email baixem os arquivos uma vez. Via site, é possível criar pastas públicas, ou com senha e/ou restrição por IP. É possível transferir arquivos entre contas do streamload também.&lt;br/&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/19831061-113709842229384907?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/113709842229384907/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=113709842229384907' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113709842229384907'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113709842229384907'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2006/01/organizando-vida-digital.html' title='Organizando a vida digital'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-113698249565070624</id><published>2006-01-11T10:28:00.000-02:00</published><updated>2006-01-11T11:18:28.466-02:00</updated><title type='text'>Mac com Intel</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Revendo meus posts neste blog, percebi que não tem nada sobre Macs. Quem lê nem percebe que sou um macmaníaco de carteirinha, sempre tive macs em casa (um SE, um Performa, um iMac, um Powerbook 5300 e em breve um G4..ou intel...who knows !), e a idéia de ter um computador pessoal rodando algo que não seja Mac OS (sobretudo depois do X) me é totalmente desagradável.
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Mas antes tarde do que nunca. Eis o primeiro post....

Depois da notícia da troca dos processadores IBM G5 por processadores Intel, a Apple acaba de lançar os primeiros iMacs com processadores Intel. Alguns sites relacionados:

&lt;a href="http://www.apple.com/imac/"&gt;Apple - iMac&lt;/a&gt;
&lt;a href="http://news.zdnet.com/2100-9595_22-6025409.html"&gt;Jobs: New Intel Macs are 'screamers' | Tech News on ZDNet&lt;/a&gt;
&lt;a href="http://www1.folha.uol.com.br/folha/informatica/ult124u19486.shtml"&gt;Apple lança primeiro iMac com processador Intel - 10/01/2006&lt;/a&gt;

Além disso, os novos laptops mudaram de nome...se chamarão MacBooks.&lt;a href="http://www.macrumors.com/pages/2006/01/20060111025256.shtml"&gt; (Mac Rumors: Intel Transition, MacBook Name, and Windows on Mac?&lt;/a&gt;, &lt;a href="http://www.apple.com/macbookpro/"&gt;Apple - MacBook Pro&lt;/a&gt; )

Nesse momento, acabo de decidir que irei esperar mais um tempo antes de comprar meu laptop.
&lt;/div&gt;&lt;/div&gt;&lt;/div&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/19831061-113698249565070624?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/113698249565070624/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=113698249565070624' title='9 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113698249565070624'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113698249565070624'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2006/01/mac-com-intel.html' title='Mac com Intel'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-113690034283734042</id><published>2006-01-10T11:39:00.000-02:00</published><updated>2006-01-10T11:39:02.886-02:00</updated><title type='text'>Pequena biblioteca AJAX</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Nas últimas semanas tenho desenvolvido muitas coisas usando  a técnica AJAX...digo técnica porque usar a palavra tecnologia neste caso não me parece apropriado. Mas isso é assunto pra outro tópico.&lt;br/&gt;&lt;br/&gt;Os resultados finais são bem interessantes e satisfatórios: as interfaces geradas com Javascript+XML+requisição assíncrona são bem mais próximas de desktop, leves e dinâmicas, e a comunicaçao entre navegador e servidor é feita de forma muito eficiente e rápida.  &lt;br/&gt;&lt;br/&gt;Minha única ressalva é que, pra quem usa algum framework como struts como eu estou usando atualmente, o uso de AJAX força a ter que reescrever em javascript muitas das funcionalidades já existentes.&lt;br/&gt;&lt;br/&gt;Meu sonho de consumo atualmente seria um bom conjunto de taglibs que gerasse código de requisisição e validação de formulários usando AJAX, deixando o código mais limpo e evitando algumas gambiarras necessárias. Existem algumas libs por aí, mas sinceramente nenhuma delas conseguiu chamar a atenção. Quem sabe um dia não me animo a escrever uma.&lt;br/&gt;&lt;br/&gt;Mas enquanto não acho a solução ideal, estou usando uma solução caseira desenvolvida inicialmente por um colega e com algumas extensões minhas: o arquivo &lt;a href="http://www.ic.unicamp.br/%7Era992237/ajax.js"&gt;ajax.js&lt;/a&gt; possui um conjunto de funções que facilitam o uso de AJAX, tanto no acesso aos dados do arquivo XML quanto no acesso e modificação do DOM HTML. Está bem simples e sem nenhuma pretensão de ser uma biblioteca definitiva. Mas pode ser uma mão na roda para quem está começando. Comentários, sugestões e críticas são bem vindos.&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/19831061-113690034283734042?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/113690034283734042/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=113690034283734042' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113690034283734042'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113690034283734042'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2006/01/pequena-biblioteca-ajax.html' title='Pequena biblioteca AJAX'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-113689432126501235</id><published>2006-01-10T09:58:00.000-02:00</published><updated>2006-01-10T09:58:41.356-02:00</updated><title type='text'>Down them All !!!!!!!</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;O plugin &lt;a href="http://downthemall.mozdev.org/"&gt;downthemall&lt;/a&gt;  para Firefox 1.5 é uma mão na roda para aquelas páginas com um monte de links para fotos ou arquivos. Ele simplesmente puxa todos os arquivos desejados de uma vez.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19831061-113689432126501235?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/113689432126501235/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=113689432126501235' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113689432126501235'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113689432126501235'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2006/01/down-them-all.html' title='Down them All !!!!!!!'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-113676747144900675</id><published>2006-01-08T22:37:00.000-02:00</published><updated>2006-01-08T22:44:31.463-02:00</updated><title type='text'>Esta na hora de recomeçar do zero ?</title><content type='html'>quem mexe com desenvolvimnto pesado de software (e talvez nem tão pesado assim) provavelmente já passou pelo dilema de recomeçar ou não o desenvolvimento de um programa do zero, ou seja: reescrever completamente (ou quase) o código. E talvez o maior problema seja convencer seu superior que essa decisão em alguns casos é necessária, se não vital.

Eu já passei por esse dilema, e acabei optando pelo redesign de uma interface gráfica, cujas versões iniciais não tinham sido feitas por mim, e que estava sob minha responsabilidade. O código estava bem mal comentado, bem complexo de entender, e adicionar qualquer funcionalidade era um processo complicado. Após um mês tinha reescrito tudo, com uma arquitetura bem simples, baseada em patterns, que me permitia ser muito mais eficiente nas atualizações.

Leonardo me enviou este texto hoje, que dá um ponto de vista bem claro sobre situações nas quais o redesign é essencial. Curto e objetivo.

&lt;a href="http://www.jroller.com/page/bloritsch?entry=when_is_it_ok_to"&gt;http://www.jroller.com/page/bloritsch?entry=when_is_it_ok_to&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19831061-113676747144900675?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/113676747144900675/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=113676747144900675' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113676747144900675'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113676747144900675'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2006/01/esta-na-hora-de-recomear-do-zero.html' title='Esta na hora de recomeçar do zero ?'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-113642891219700860</id><published>2006-01-05T00:25:00.000-02:00</published><updated>2006-01-05T00:41:52.213-02:00</updated><title type='text'>Gmail Tips</title><content type='html'>Este post é dedicado a Leo, Daniel, Jéssica e Tereza, que apesar de geeks assumidos, não sabiam nenhuma das dicas a seguir:

1) Suponha que meu email no gmail seja &lt;span style="font-weight: bold;"&gt;blogger@gmail.com&lt;/span&gt;. Então qualquer email no formato &lt;span style="font-weight: bold;"&gt;blogger+&lt;span style="font-style: italic;"&gt;&lt;algumacoisa&gt;&lt;/span&gt;@gmail.com&lt;/span&gt; chegará na minha caixa postal. Por exemplo:
os comentários sobre meus posts neste blog são enviados para blogger+comments@gmail.com.

Vantagem ? FILTRO. É possível usar o Subject para filtrar..algo do tipo&lt;span style="font-style: italic;"&gt; [comments] etc.... &lt;/span&gt;Mas nem sempre é possível adicionar um título específico, é mais sujeito a erros.

2) &lt;span style="font-weight: bold;"&gt;Multiplos Senders:&lt;/span&gt; é possivel configurar o gmail para enviar email com endereços de sender diferentes de sua conta do gmail. Para isso, é preciso que as outras contas existam. Clique em &lt;span style="font-weight: bold;"&gt;Settings-&gt;Accounts-&gt;add another email address. &lt;/span&gt;Pronto: só seguir os passos e o novo email estará cadastrado. Na hora de compor uma nova mensagem, uma caixa de seleção permitirá selecionar o endereço desejado.

3) &lt;span style="font-weight: bold;"&gt;Personalizar Web Clips:&lt;/span&gt; a mais nova novidade do gmail é o web clips, a abinha de notícias que aparece em cima da lista de emails. Este novo serviço exibe headlines de feeds RSS de vários sites. Para torna-lo mais interessante, é possível personaliza-lo, removendo feeds não lidos e adicionando feeds de interesse.  Para isso, vá em &lt;span style="font-weight: bold;"&gt;Setting-&gt;Web Clips. &lt;/span&gt;No campo de busca, indique o endereço completo do feed RSS desejado (por exemplo http://log4dev.blogspot.com/atom.xml). Pronto..basta habilita-lo e ele aparecerá no seu web-clips.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19831061-113642891219700860?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/113642891219700860/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=113642891219700860' title='3 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113642891219700860'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113642891219700860'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2006/01/gmail-tips.html' title='Gmail Tips'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-113631922934833951</id><published>2006-01-03T18:26:00.000-02:00</published><updated>2006-01-10T11:46:47.930-02:00</updated><title type='text'>Teste simples de qualidade de desenvolvimento</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;O artigo   &lt;a href="http://www.joelonsoftware.com/articles/fog0000000043.html"&gt;The Joel Test: 12 Steps to Better Code&lt;/a&gt; propõe um pequeno teste, transcrito abaixo, para verificar a qualidade do seu ambiente de desenvolvimento.


Apesar de simples, aborda pontos importantes para qualquer ambiente de desenvolvimento, e parece um bom ponto de partida para uma avaliação básica.


  1. Do you use source control?
  2. Can you make a build in one step?
  3. Do you make daily builds?
  4. Do you have a bug database?
  5. Do you fix bugs before writing new code?
  6. Do you have an up-to-date schedule?
  7. Do you have a spec?
  8. Do programmers have quiet working conditions?
  9. Do you use the best tools money can buy?
 10. Do you have testers?
 11. Do new candidates write code during their interview?
 12. Do you do hallway usability testing?

&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;

&lt;/span&gt;&lt;/span&gt;&lt;/div&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/19831061-113631922934833951?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/113631922934833951/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=113631922934833951' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113631922934833951'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113631922934833951'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2006/01/teste-simples-de-qualidade-de.html' title='Teste simples de qualidade de desenvolvimento'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-113631446256559396</id><published>2006-01-03T16:54:00.000-02:00</published><updated>2006-01-03T16:54:22.573-02:00</updated><title type='text'>Escrevendo APIs em Java</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;O &lt;a href="http://www.artima.com/weblogs/viewpost.jsp?thread=142428"&gt;Java API Design Guidelines&lt;/a&gt;  resume algumas boas práticas para desenvolver APIs em Java. 
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19831061-113631446256559396?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/113631446256559396/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=113631446256559396' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113631446256559396'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113631446256559396'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2006/01/escrevendo-apis-em-java.html' title='Escrevendo APIs em Java'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-113630771918403289</id><published>2006-01-03T15:01:00.000-02:00</published><updated>2006-01-03T15:01:59.226-02:00</updated><title type='text'>Aprendendo a programar</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;a href="http://www.joelonsoftware.com/articles/ThePerilsofJavaSchools.html"&gt;The Perils of JavaSchools - Joel on Software&lt;/a&gt; &lt;br/&gt;&lt;br/&gt;O artigo citado acima toca um ponto interessante: formação em computação deixando de lado conceitos importantes. Java é uma linguagem extremamente interessante (com a qual eu trabalho inclusive), mas que esconde muitos aspectos que na formação básica são importantes. Assim como aprender lógica pura e matemática e cálculo númerico são importantes, apesar de raramente termos  que resolver sistemas e equações num software comercial. E de qualquer forma, existem biblotecas pra isso, não é mesmo ? &lt;br/&gt;&lt;br/&gt;O resultado são programadores que sabem montar interfaces gráficas em IDEs visuais, conhecem if/while e for e não sabem o que é orientação a objeto.....&lt;br/&gt;&lt;br/&gt;Aliás, acho também absurdo um curso de Ciência da Computação superior não ter um curso sobre compiladores....mas isso fica pra outra discussão.&lt;br/&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/19831061-113630771918403289?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/113630771918403289/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=113630771918403289' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113630771918403289'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113630771918403289'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2006/01/aprendendo-programar.html' title='Aprendendo a programar'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-113594427282876010</id><published>2005-12-30T10:06:00.000-02:00</published><updated>2005-12-30T10:06:40.733-02:00</updated><title type='text'>Quaero: concorrência para Google ?</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;br/&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;A Europa tem feito um esforço bem grande nos últimos anos para criar sistemas e padrões próprios, em geral se contrapondo a Estados Unidos. Alguns exemplos: &lt;br/&gt;&lt;ol&gt;&lt;li&gt;Airbus, concorrente da Boeing&lt;/li&gt;&lt;br/&gt;&lt;li&gt;GSM, padrão europeu aberto de telefonia celular concorrente do CDMA, propretário da Qualcomm (americana)&lt;/li&gt;&lt;br/&gt;&lt;li&gt;Sistema de televisão digital europeu&lt;/li&gt;&lt;br/&gt;&lt;li&gt;Projeto Galileo, que pretende permitir que a Europa tenha seu sistema próprio de localização global, dispensando o uso do GPS, que pertence às Forças Armadas Americanas&lt;/li&gt;&lt;br/&gt;&lt;/ol&gt;A mais nova tentativa é o projeto &lt;span style="font-weight: bold;"&gt;Quaero&lt;/span&gt;, que pretende desenvolver uma ferramenta de busca e indexação em textos, áudio e vídeo para concorrer com o &lt;span style="font-weight: bold;"&gt;Google&lt;/span&gt;. O projeto é uma iniciativa dos governos &lt;span style="font-weight: bold;"&gt;frances&lt;/span&gt; e &lt;span style="font-weight: bold;"&gt;alemão&lt;/span&gt; e será desenvolvido com o apoio de empresas de telecom, como Thomson, France Telecom e outras. O investimento estimado é de 360 milhões de euros em 5 anos.&lt;br/&gt;&lt;br/&gt;Quer ler mais sobre isso ?&lt;br/&gt;&lt;br/&gt;&lt;/div&gt;&lt;/div&gt;&lt;a href="http://www1.folha.uol.com.br/folha/informatica/ult124u19432.shtml"&gt;Folha Online - Informática - Europa cria alternativa à hegemonia do Google - 28/12/2005&lt;/a&gt; &lt;br/&gt; &lt;blockquote/&gt;&lt;a href="http://www.zdnet.fr/actualites/internet/0,39020774,39221831,00.htm"&gt;Robert Havas, Thomson: «Un moteur de recherche multimédia franco-allemand devrait naître d'ici deux ans» - Actualités - ZDNet.fr&lt;/a&gt; &lt;br/&gt; &lt;blockquote/&gt;&lt;a href="http://www.vnunet.fr/"&gt;VNUnet.fr - La référence IT des nouvelles technologies&lt;/a&gt; &lt;br/&gt; &lt;blockquote/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19831061-113594427282876010?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/113594427282876010/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=113594427282876010' title='3 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113594427282876010'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113594427282876010'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2005/12/quaero-concorrncia-para-google.html' title='Quaero: concorrência para Google ?'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-113585780417990735</id><published>2005-12-29T10:03:00.000-02:00</published><updated>2005-12-29T10:03:24.196-02:00</updated><title type='text'>Poder de CSS</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Durante muito tempo, desenvolvimento de sites na internet era considerado trabalho de programador. Sim, porque saber "programar" em HTML era uma arte dominada por poucos.......&lt;br/&gt;&lt;br/&gt;Hoje em dia com o advento de aplicações Web complexas, existe um campo enorma para desenvolvedores mostrarem suas habilidades. Mas definitivamente, programação gráfica para Web agora é coisa levada a sério, e deve ser feita por quem realmente entende disso, ou seja, por designer gráficos.&lt;br/&gt;&lt;br/&gt;O site &lt;a href="http://www.csszengarden.com/"&gt;css Zen Garden: The Beauty in CSS Design&lt;/a&gt; mostra o que se pode fazer com uma simples página &lt;span style="font-weight: bold;"&gt;html&lt;/span&gt; (&lt;a href="http://www.csszengarden.com/zengarden-sample.html"&gt;aqui&lt;/a&gt;) e com um arquivo &lt;span style="font-weight: bold;"&gt;CSS&lt;/span&gt; (&lt;a href="http://www.csszengarden.com/zengarden-sample.css"&gt;aqui&lt;/a&gt;). Para mostrar o poder de folhas de estilo, o site oferece a possibilidade de mudar o design da página, mantendo o mesmo conteúdo: selecione um dos estilos listados no menu a direita e veja o resultado. Fenomenal.&lt;br/&gt; &lt;br/&gt; &lt;blockquote/&gt;&lt;br/&gt;&lt;br/&gt; &lt;blockquote/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19831061-113585780417990735?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/113585780417990735/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=113585780417990735' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113585780417990735'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113585780417990735'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2005/12/poder-de-css.html' title='Poder de CSS'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-113585720838642030</id><published>2005-12-29T09:53:00.000-02:00</published><updated>2005-12-29T09:53:29.930-02:00</updated><title type='text'>Biblioteca de componentes gráficos em Javascript </title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Com o advento de &lt;span style="font-weight: bold;"&gt;AJAX&lt;/span&gt;, bibliotecas de componentes visuais em Javascript estão pipocando. Uma delas é a  &lt;a href="http://rialto.application-servers.com/wiki/"&gt;RIALTO&lt;/a&gt;, acronimo para &lt;span style="font-weight: bold;"&gt;Rich Internet Application Toolkit.&lt;/span&gt; Oferece vários componentes gráficos bem bonitos, utilizando AJAX como forma de carregar dados. Para quem trabalha com &lt;span style="font-weight: bold;"&gt;Struts&lt;/span&gt; (meu caso atualmente), ainda fornece uma taglib para facilitar integração do código. Programadores &lt;span style="font-weight: bold;"&gt;.NET&lt;/span&gt; e &lt;span style="font-weight: bold;"&gt;PHP&lt;/span&gt;, não se desesperem: segundo o site, bibliotecas de integração do RIALTO com essas linguagens estão saindo do forno.&lt;br/&gt; &lt;blockquote/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19831061-113585720838642030?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/113585720838642030/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=113585720838642030' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113585720838642030'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113585720838642030'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2005/12/biblioteca-de-componentes-grficos-em.html' title='Biblioteca de componentes gráficos em Javascript '/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-113579548406609290</id><published>2005-12-28T16:44:00.000-02:00</published><updated>2005-12-28T16:44:45.266-02:00</updated><title type='text'>Filosofia de trabalho - Aprendendo com Open Source</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;O texto &lt;a href="http://www.paulgraham.com/opensource.html"&gt;What Business Can Learn from Open Source&lt;/a&gt; discute como é possível que projetos Open Source, desenvolvidos por programadores do mundo todo (em geral trabalhando de graça), podem competir em pé de igualdade com programas desenvolvidos por multinacionais (que investem milhões), e como isso pode ser utilizado como filosofia de trabalho para empresas e pessoas em geral.&lt;br/&gt; &lt;blockquote&gt;&lt;br/&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19831061-113579548406609290?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/113579548406609290/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=113579548406609290' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113579548406609290'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113579548406609290'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2005/12/filosofia-de-trabalho-aprendendo-com.html' title='Filosofia de trabalho - Aprendendo com Open Source'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-113578269977559173</id><published>2005-12-28T13:11:00.000-02:00</published><updated>2005-12-28T13:11:39.796-02:00</updated><title type='text'>Blogando diretamente do Firefox com Performancing</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Se você está lendo este post, então significa que a extensão &lt;a href="http://performancing.com/firefox"&gt;Performancing for Firefox | Performancing.com&lt;/a&gt; funcionou perfeitamente. Extensões do firefox podem ser uma mão na roda para facilitar várias pequenas tarefas. Por exemplo, alguns colegas de trabalho controlam o toca MP3 diretamente do browser, ou então tem infomaçoes sobre tempo e temperatura para os próximos dias.&lt;br/&gt;&lt;br/&gt;A extensão &lt;span style="font-weight: bold;"&gt;Performacing para Firefox 1.5&lt;/span&gt; permite enviar posts diretamente do browser, sem precisar acessar o site. Instale a extensão (clicando no link acima) e um ícone irá aparecer no canto inferior direito da janela. Clique em cima, e um editor bastante completo irá aparecer na tela. Pronto: só editar o texto. Para enviar, basta configurar o seu servidor de blog (no meu caso, o blogger.com já está listado), colocar senha, username, e a minha lista de blogs e posts aparece no editor. Outra funcionalidade interessante permite criar um post com um link sobre a página que está sendo visualizada (por exemplo, o link acima foi criado com esta ferramenta). &lt;br/&gt;&lt;br/&gt;&lt;br/&gt; &lt;blockquote/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19831061-113578269977559173?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/113578269977559173/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=113578269977559173' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113578269977559173'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113578269977559173'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2005/12/blogando-diretamente-do-firefox-com.html' title='Blogando diretamente do Firefox com Performancing'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-113577723989428434</id><published>2005-12-28T11:33:00.000-02:00</published><updated>2005-12-28T11:42:00.700-02:00</updated><title type='text'>Web 2.0 ?</title><content type='html'>Depois da Internet 2, AJAX...temos agora o mais novo nome marketeiro e comercial da moda: Web 2.0.
O que é ? Bom,  pelo o que eu entendi, é uma mudança de paradigma: de  "simples" rede de computadores ligados por TCP/IP com um protocolo para visualização de páginas (HTTP) , passamos a enxergar a Web como uma plataforma de serviços e softwares.

Em grande parte isso é possibilitado pela  disseminação da  banda larga (não estamos ainda com  Internet 2,
mas estamos chegando lá) e de avanços enormes nas interfaces disponíveis atualmente na Web, em grande parte graças a recursos como AJAX.

Este novo conceito está se tornando tão importante que até uma &lt;a href="http://www.web2con.com/"&gt;conferência&lt;/a&gt; a este respeito
foi organizada em outubro deste ano em São Francisco. Será que o termo pega ? Veremos.
Mas a tendencia com certeza é irreversivel.

Alguns artigos a respeito: &lt;a href="http://webinsider.uol.com.br/vernoticia.php/id/2656"&gt;Webinsider&lt;/a&gt; e &lt;a href="http://www.oreillynet.com/pub/a/oreilly/tim/news/2005/09/30/what-is-web-20.html"&gt;"What is Web 2.0"&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19831061-113577723989428434?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/113577723989428434/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=113577723989428434' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113577723989428434'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113577723989428434'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2005/12/web-20.html' title='Web 2.0 ?'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-113561367284119494</id><published>2005-12-26T14:14:00.000-02:00</published><updated>2005-12-27T09:09:39.416-02:00</updated><title type='text'>Dicas sobre Struts</title><content type='html'>&lt;p class="mobile-post"&gt;O site &lt;a href="http://www.husted.com/struts/"&gt;Husted.com - About Struts&lt;/a&gt;
contém um conjunto interessante
de dicas e artigos sobre Struts. Boa fonte de informações para
programadores de vários níveis.&lt;/p&gt;&lt;p class="mobile-post"&gt;PS: Feliz Natal.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19831061-113561367284119494?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/113561367284119494/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=113561367284119494' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113561367284119494'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113561367284119494'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2005/12/dicas-sobre-struts.html' title='Dicas sobre Struts'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-113517142935878110</id><published>2005-12-21T11:19:00.000-02:00</published><updated>2005-12-21T11:26:51.493-02:00</updated><title type='text'>Gráficos em Java</title><content type='html'>A biblioteca &lt;a href="http://www.jfree.org/jfreechart/index.php"&gt;JFreeChart&lt;/a&gt;, do projeto &lt;a href="http://www.jfree.org/"&gt;JFree.org&lt;/a&gt;, cria gráficos de uma qualidade incrível, e permite gerar um número enorme de tipos de gráficos, com vários parâmetros configuráveis, além de permitir a exportação em vários formatos úteis. Outro ponto interessante é que foi desenvolvido uma biblioteca que permite integrar o JFreeChart ao código JSP, para geração de imagens para internet. Mas este ainda não usei.  Aconselho seu uso  caso  precise desenvolver uma aplicação que gere gráficos bonitos.

O único porém é que apesar da bibloteca ser aberta, gratuíta e o código disponível, a documentação oficial é paga. Por isso, para desenvolver sem gastar nada, será necessário passar um tempinho lendo exemplos de códigos e eventualmente alguns fóruns por aí.  Mas nada que seja do outro mundo, sobretudo pra quem já está habituado a ter que garimpar informações no mundo open source.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19831061-113517142935878110?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/113517142935878110/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=113517142935878110' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113517142935878110'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113517142935878110'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2005/12/grficos-em-java.html' title='Gráficos em Java'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-113509587489558888</id><published>2005-12-20T14:20:00.000-02:00</published><updated>2005-12-20T14:28:56.680-02:00</updated><title type='text'>Stallman, Linux e Politica</title><content type='html'>A ZNet publicou uma entrevista muito interessante com Richard Stallman, onde ele fala sobre o movimento Software Livre, sobre o sistema Linux (ou melhor, GNU/Linux) e sobre  política. Longo, mas bastante interessante. Vale ressaltar a explicação entre as diferenças dos movimentos de Open Source e Free Software, e a menção à  UNIVATES e ao SAGU.
&lt;a href="http://www.zmag.org/content/showarticle.cfm?SectionID=13&amp;amp;ItemID=9350"&gt;
Clique aqui para ler o artigo.&lt;/a&gt;

PS: Agradeço ao Danilo, que me indicou o texto.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19831061-113509587489558888?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/113509587489558888/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=113509587489558888' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113509587489558888'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113509587489558888'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2005/12/stallman-linux-e-politica.html' title='Stallman, Linux e Politica'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-113508523090066287</id><published>2005-12-20T11:23:00.000-02:00</published><updated>2005-12-20T11:27:10.926-02:00</updated><title type='text'>Para onde as pessoas olham quando acessam uma página HTML</title><content type='html'>Entender o comportamento dos internautas é essencial para o sucesso de uma página na web.

O artigo &lt;a href="http://www.poynter.org/content/content_view.asp?id=70472"&gt;&lt;b&gt;Eyetrack III: What News Websites Look Like Through Readers' Eyes &lt;/b&gt;&lt;/a&gt;da uma
idéia de alguns estudos sobre o comportamento de leitura de pessoas visitando sites de notícias.
&lt;span class="down" style="display: block;" id="formatbar_CreateLink" title="Link" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19831061-113508523090066287?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/113508523090066287/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=113508523090066287' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113508523090066287'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113508523090066287'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2005/12/para-onde-as-pessoas-olham-quando.html' title='Para onde as pessoas olham quando acessam uma página HTML'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-113500832612556003</id><published>2005-12-19T13:58:00.000-02:00</published><updated>2005-12-19T14:05:26.136-02:00</updated><title type='text'>Página de 1 milhão de dólares</title><content type='html'>O interessante da internet é que todos podem desenvolver suas idéias, por mais loucas que sejam. E melhor ainda: sempre se pode encontrar alguém disposto a bancar as ditas cujas.

A &lt;a href="http://www.milliondollarhomepage.com/"&gt;1 million dollar home page&lt;/a&gt; é um exemplo disso. Um estudante americano resolveu criar  uma página para vender pixels. Ou melhor ,  blocos de 10x10 pixels a 1 dolar cada pixel (ou seja, 100 dolares cada bloquinho). Em cada bloco comprado, o comprador ganha um link para sua homepage, e pode colocar um logo, desenho, símbolo, ou qualquer outro elemento gráfico que caiba no espaço contratado. Qual a vantage para o comprador ? Link para sua página. E um link para uma página, na lógica da internet dominada pelo sistema de busca do google, é extremamente importante. (Quer saber porque ? Leia o artigo sobre o google rank &lt;a href="http://www.iprcom.com/papers/pagerank/"&gt;aqui&lt;/a&gt;)

Resultado: o cara vendeu 800.000 dólares.

Um dia ainda vou ter uma idéia dessas.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19831061-113500832612556003?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/113500832612556003/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=113500832612556003' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113500832612556003'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113500832612556003'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2005/12/pgina-de-1-milho-de-dlares.html' title='Página de 1 milhão de dólares'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-113473073381132687</id><published>2005-12-16T08:55:00.000-02:00</published><updated>2005-12-16T08:58:53.820-02:00</updated><title type='text'>Mentes ociosas criam .... GoogleFight !</title><content type='html'>Escolha duas palavras. Va até o site do &lt;a href="http://www.googlefight.com/"&gt;GoogleFight&lt;/a&gt; e digite as palavras nos campos de texto. Aperte o botão "Make a Fight". O resultado da luta: ganaha a palavra que aparecer mais vezes no google. Além disso, existe a opção de se rodar "lutas" pré determinadas, como Harry Potter contra o Cálice de Fogo, ou Bush contra Katrina.

A real utilidade disso ? Duvidosa. Mas é inegavel que medir o número de ocorrências de uma palavra no google pode ser uma medida informal de popularidade. E pode ser um bom passatempo, caso todos os outros falhem.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19831061-113473073381132687?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/113473073381132687/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=113473073381132687' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113473073381132687'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113473073381132687'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2005/12/mentes-ociosas-criam-googlefight.html' title='Mentes ociosas criam .... GoogleFight !'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-113464793312276536</id><published>2005-12-15T09:42:00.000-02:00</published><updated>2005-12-19T17:49:12.586-02:00</updated><title type='text'>Para iniciantes em AJAX</title><content type='html'>AJAX é a sigla da moda no mundo de desenvolvimento Web. Se você nunca ouviu falar, e trabalha com tecnologia, aconselho fortemente a leitura mais assídua de sites de notícias...nassas horas um bom RSS ajuda e muito.

O melhor de tudo é que AJAX não é absolutamente nada. Ou melhor: não existe uma tecnologia AJAX, mas sim um conjunto de tecnologias bem conhecidas que foram colocadas juntas sob uma sigla bonitinha, criada pela &lt;a href="http://www.adaptivepath.com/publications/essays/archives/000385.php"&gt;Adaptative Path&lt;/a&gt;.

Resumindo: AJAX = Javascript+CSS+XML+conexão assíncrona no servidor. Este último elemento é de fato o mais importante nessa brincadeira toda:  com ele é possível fazer requisições  no servidor em background, sem ter que bloquear a interface toda, permitindo que  interfaces Web se aproximem muito de interfaces de softwares desktops. Acabou o paradigma do "Clique aqui...espere alguns segundos..a página some..aparece uma nova".

Mas a verdade é que a parte de conexão assíncrona é banal de se utilizar. Alguns segundos de busca no google, e templates de código (que são todos iguais por sinal) virão aos montes. O problema é o resto..javascript+CSS+mexer no DOM do HTML+mexer no DOM do XML.

Achei 3 referências bem interessantes para aprender sobre isso.

A primeira é um conjunto de tutoriais  sobre javascript, HTML DOM e XML DOM bem interessantes e bastante completo, com  exemplos e tudo mais, e pode ser encontrado no site da &lt;a href="http://www.w3schools.com/"&gt;w3school&lt;/a&gt;  .
A segunda referência se baseia na máxima de Lavoisier "Nada se cria, tudo se transforma". Em termos de desenvolvimento e programação, ler código alheio e ver como bons programadores programam é no meu ponto de vista a melhor forma de aprender. E muita coisa eu aprendi no site &lt;a href="http://www.dynamicdrive.com/"&gt;dynamicdrive&lt;/a&gt; , que possui uma quantidade enorme de scripts muito interessantes. A última,  que pode ser boa fonte de outras referências é o verbete AJAX da &lt;a href="http://en.wikipedia.org/wiki/AJAX"&gt;Wikipédia&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19831061-113464793312276536?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/113464793312276536/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=113464793312276536' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113464793312276536'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113464793312276536'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2005/12/para-iniciantes-em-ajax.html' title='Para iniciantes em AJAX'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-113464537910024882</id><published>2005-12-15T09:00:00.000-02:00</published><updated>2005-12-15T09:16:19.110-02:00</updated><title type='text'>CSS Hacks</title><content type='html'>Um grande problema enfrentado por desenvolvedores de interfaces Web é a diferença muitas vezes sutil de interpretação de comandos CSS por parte dos navegadores. Um exemplo simples é a questão do tamanho de um div e de sua borda: um navegador (nunca lembro qual) considera que a borda deve ser considerada dentro do tamanho do DIV, utilizando o espaço interno (portanto, se for estipulado que um div tem tamanho 10px, ele terá 10px não importa o tamanho da borda..) e o outro considera que a borda deve ser adicionada externamente, preservando o espaço interno do DIV (portanto, se o div tiver 10px e a borda 2px, o tamanho total do componente será de 14px...).

Esses detalhes podem ser uma grande fonte de problemas em layouts muito detalhistas. Mas a algum tempo atrás, enfrentando problemas deste tipo, descobri um pequeno hack em CSS muito útil. Este hack se utiliza do fato que o IE, ao contrário do Firefox, é mais flexível na hora de interpretar a folha de estilo.
Assim, é possível definir uma folha de estilo que se adeque aos dois navegadores, sem problemas.

Como funciona ? Simples !

Imagine a seguinte folha de estilo:

.titlediv{
 width: 10px;
 _width: 12px;
}

O Firefox irá ler o parâmetro width, considerar válido, e definirá a largura do meu div em 10 pixels. Depois lerá _width, não irá reconhecer o parâmetro, e terminará o processamento. O IE também irá ler o parâmetro width, definindo a largura em 10px. Porém, ele irá considerar _width como válido também, apesar do _, e irá sobreescrever o valor. Pronto. Nossa folha de estilo se adaptou ao navegador.

Isso vale para qualquer parâmetro de um CSS..desde que o parâmetro hackeado se encontre logo depois do parâmetro correto.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19831061-113464537910024882?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/113464537910024882/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=113464537910024882' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113464537910024882'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113464537910024882'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2005/12/css-hacks.html' title='CSS Hacks'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-113450592384841891</id><published>2005-12-13T18:28:00.000-02:00</published><updated>2005-12-13T18:32:03.866-02:00</updated><title type='text'>Nova Modalidade Esportiva: YETI SPORTS</title><content type='html'>Não aguenta mais fazer o que está fazendo e não tem como sair da frente do computador pra ir pegar sol em uma praia, ou então tomar um chopp gelado no boteco da esquina ????

&lt;a href="http://www.yetisports.org/"&gt;Yeti Sports&lt;/a&gt;...não resolve o problema da praia, mas pelo menos refresca a cabeça por alguns instantes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19831061-113450592384841891?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/113450592384841891/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=113450592384841891' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113450592384841891'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113450592384841891'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2005/12/nova-modalidade-esportiva-yeti-sports.html' title='Nova Modalidade Esportiva: YETI SPORTS'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-113450139585104588</id><published>2005-12-13T17:06:00.000-02:00</published><updated>2005-12-13T17:16:35.853-02:00</updated><title type='text'>Desenvolvimento em Firefox</title><content type='html'>Quem já desenvolveu interfaces web com CSS e Javascripts sabe que fazer uma interface bem feita e funcional em qualquer navegador podeser (e com certeza será) um processo longo, cheio de erros e dores de cabeça.

Essa experiência pode ser ainda pior, graças às ótimas mensagens de erro padrão dos navegadores, principalmente do IE (algo do gênero "Objeto necessário - Linha 5"....daí você pede pra ler o código fonte, e o dito cujo vem no Notepad).

Felizmente, alguns programadores já passaram por problemas deste tipo e criaram ferramentas para ajudar no processo de desenvolvimento, pelo menos para Firefox. Algumas extensões podem ser uma mão na roda e economizam horas preciosas de desenvolvimento útil.
Dentre as extensões, vale destacar uma: &lt;span style="font-weight: bold;"&gt;WebDeveloper&lt;/span&gt;. Disponível no site da firefox, ela permite mexer em quase todos os parâmetros de uma página em tempo real, destaca tabelas, divs, imagens, exibe tamanhos, fontes, permite edição de folha de estilo....

Quem conhecer alguma ferramenta do genero para IE, de preferência FREE, favor entrar em contato.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19831061-113450139585104588?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/113450139585104588/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=113450139585104588' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113450139585104588'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113450139585104588'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2005/12/desenvolvimento-em-firefox.html' title='Desenvolvimento em Firefox'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19831061.post-113449099665189546</id><published>2005-12-13T14:20:00.000-02:00</published><updated>2005-12-13T17:23:44.073-02:00</updated><title type='text'>Fluxo de Informações com Struts</title><content type='html'>Dica interessante para novatos (e talvez não tão novatos assim) em Struts:

O link abaixo descreve diferentes fluxos de  processamento de uma aplicação,
e como implementa-los usando mapeamento de ações em Struts.

http://www.theserverside.com/articles/article.tss?l=StrutsActionMapping

Vale a pena dar uma olhada.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19831061-113449099665189546?l=log4dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://log4dev.blogspot.com/feeds/113449099665189546/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19831061&amp;postID=113449099665189546' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113449099665189546'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19831061/posts/default/113449099665189546'/><link rel='alternate' type='text/html' href='http://log4dev.blogspot.com/2005/12/fluxo-de-informaes-com-struts.html' title='Fluxo de Informações com Struts'/><author><name>Miguel Galves</name><uri>http://www.blogger.com/profile/12945775386966118228</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
