<?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-2909211050817756519</id><updated>2011-10-06T10:55:53.541-03:00</updated><category term='ruby'/><category term='estilos'/><category term='freeit'/><category term='cyclos'/><category term='javascript'/><category term='sidux'/><category term='lg p350'/><category term='lucid'/><category term='skype'/><category term='globo.bom'/><category term='64 bits'/><category term='applet'/><category term='broadcom'/><category term='jogos'/><category term='gnome'/><category term='criteria'/><category term='firefox'/><category term='grails'/><category term='qureydsl'/><category term='audio'/><category term='ejb'/><category term='arch linux'/><category term='rails'/><category term='javascriptools'/><category term='alsa'/><category term='layout'/><category term='firmware'/><category term='openSUSE'/><category term='tradução'/><category term='linux'/><category term='kernel panic'/><category term='java'/><category term='world of goo'/><category term='kubuntu'/><category term='internet explorer'/><category term='gtk'/><category term='certificação'/><category term='phn 10103'/><category term='dialogs'/><category term='jaas'/><category term='kde'/><category term='intrepid'/><category term='microfone'/><category term='querydsl'/><category term='adblock'/><category term='android'/><category term='smiles'/><category term='sql'/><category term='groovy'/><category term='jpa'/><category term='netbook'/><category term='qt'/><category term='ubuntu'/><category term='kgtk'/><category term='banco do brasil'/><category term='nvidia'/><category term='instrodi'/><category term='stro'/><category term='unity'/><title type='text'>Free IT / Luis Fernando Planella Gonzalez</title><subtitle type='html'>Programação, software livre e outras coisas da vida</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://luisfpg.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://luisfpg.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Luis Fernando</name><uri>http://www.blogger.com/profile/10369964459649811472</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-6BL3zQMFi84/TofJ6WdnhFI/AAAAAAAAAK8/cfVeC0G43lQ/s220/avatar%2BLuis%2B2.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>37</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2909211050817756519.post-5753938350917316519</id><published>2011-09-30T09:01:00.000-03:00</published><updated>2011-09-30T09:01:10.924-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='internet explorer'/><category scheme='http://www.blogger.com/atom/ns#' term='applet'/><title type='text'>Yet another Internet Explorer issue: Java applets created by JavaScript</title><content type='html'>In &lt;a href="http://www.cyclos.org/"&gt;Cyclos&lt;/a&gt;, I've been working to implement support for printing in a local receipt printer.&lt;br /&gt;We found the &lt;a href="http://code.google.com/p/jzebra/"&gt;jZebra&lt;/a&gt; project which is a Java applet that prints in a receipt printer on the local computer.&lt;br /&gt;So, as this is an optional feature, and will only be used by few users, we didn't want to load the applet on every page. Instead, only when the user clicks print, the applet tag is created and appended to the document with JavaScript (using document.createElement("applet") and friends).&lt;br /&gt;Then, the usual sequence:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Test in Firefox: check.&lt;/li&gt;&lt;li&gt;Test in Chrome: check.&lt;/li&gt;&lt;li&gt;Test in Opera: check.&lt;/li&gt;&lt;li&gt;Find a computer running windows somewhere to test in Internet Exporer: fail.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Why I wasn't surprised?&lt;/div&gt;&lt;div&gt;When adding the applet through JavaScript, MSIE somehow doesn't makes the public applet methods visible for JavaScript. So, no .findPrinter(), no .append(), no .print().&amp;nbsp;&lt;/div&gt;&lt;div&gt;Result?&amp;nbsp;As this feature won't be used by most users, we decided to disable it on MSIE, at least until some workaround is found. ..&lt;/div&gt;&lt;div&gt;&lt;br /&gt;What a revange!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2909211050817756519-5753938350917316519?l=luisfpg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://luisfpg.blogspot.com/feeds/5753938350917316519/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2909211050817756519&amp;postID=5753938350917316519' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/5753938350917316519'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/5753938350917316519'/><link rel='alternate' type='text/html' href='http://luisfpg.blogspot.com/2011/09/yet-another-internet-explorer-issue.html' title='Yet another Internet Explorer issue: Java applets created by JavaScript'/><author><name>Luis Fernando</name><uri>http://www.blogger.com/profile/10369964459649811472</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-6BL3zQMFi84/TofJ6WdnhFI/AAAAAAAAAK8/cfVeC0G43lQ/s220/avatar%2BLuis%2B2.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2909211050817756519.post-3371889124095301401</id><published>2011-09-24T23:30:00.002-03:00</published><updated>2011-09-24T23:30:39.716-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firmware'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><category scheme='http://www.blogger.com/atom/ns#' term='lg p350'/><title type='text'>Atualizando o firmware do LG Optimus ME (P350) com VirtualBox no Linux</title><content type='html'>Eu comprei recentemente um celular LG Optimus ME (P350), que vem com o Android 2.2.2.&lt;br /&gt;O problema é que ele vem com o firmware bem desatualizado 10a. Ele tem um bug que, ao tocar na tela, a cpu vai lá em cima... Emfim.&lt;br /&gt;Baseei-me neste post para realizar o procedimento:&amp;nbsp;&lt;a href="http://www.sleetherz.com/2011/09/how-to-update-lg-optimus-p350-to-firmware-v-10c/"&gt;http://www.sleetherz.com/2011/09/how-to-update-lg-optimus-p350-to-firmware-v-10c/&lt;/a&gt;&lt;br /&gt;Mas tem um detalhe extra: Como não tenho o windows instalado (uso somente o Linux), e o software é só para windows, temos um probleminha. Mas, como nem tudo é perfeito, tenho um VirtualBox com um winxp pra esses casos... Então tá.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Atenção!&lt;/b&gt;&amp;nbsp;Este procedimento foi o que eu fiz, e funcionou para mim. Não me responsabilizo caso dê algo errado...&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Primeiro&lt;/b&gt;: Quando o telefone está em modo de emergência, ele é detectado pelo Linux como um modem. Assim, o kernel sobe o módulo&amp;nbsp;cdc_acm, para poder utilizar o dispositivo. O problema é que se o Linux usa o dispositivo, não tem como ele ser usado pelo VirtualBox. Então, a primeira coisa a fazer é impedir o carregamento desse módulo. Edite o arquivo &lt;b&gt;/etc/modprobe.d/blacklist.conf&lt;/b&gt; e adicione a seguinte linha:&lt;br /&gt;&lt;b&gt;blacklist cdc_acm&lt;/b&gt;. Depois que o procedimento terminar, você pode remover essa linha.&lt;br /&gt;&lt;b&gt;&lt;br /&gt;Segundo&lt;/b&gt;: Tenha o VirtualBox com o Extension Pack instalado. Dê uma olhada na página de downloads:&amp;nbsp;&lt;a href="http://www.virtualbox.org/wiki/Downloads"&gt;http://www.virtualbox.org/wiki/Downloads&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Agora, execute estas operações dentro da máquina virtual:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;O artigo no qual me baseei recomenda que o micro esteja desconectado da Internet. No VirtualBox, basta ir em Dispositivos &amp;gt; Adaptadores de Rede e desmarcar o Cabo conectado.&lt;/li&gt;&lt;li&gt;Baixe o firmware em&amp;nbsp;&lt;a href="http://www.lg-phones.org/lg-optimus-me-firmwares-download.html"&gt;http://www.lg-phones.org/lg-optimus-me-firmwares-download.html&lt;/a&gt;. Instalei o 10c por ser o último com suporte a português do Brasil. Mas tem até o 10f.&lt;/li&gt;&lt;li&gt;Baixe o driver da LG para o telefone:&amp;nbsp;&lt;a href="http://www.mediafire.com/?qvdbresp5nntb6x"&gt;http://www.mediafire.com/?qvdbresp5nntb6x&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Baixe o KDZ firmware uploader:&amp;nbsp;&lt;a href="http://www.unclenet.de/files/KDZ_FW_UPD_EN.7z"&gt;http://www.unclenet.de/files/KDZ_FW_UPD_EN.7z&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Instale o driver da LG.&lt;/li&gt;&lt;li&gt;Extraia o&amp;nbsp;KDZ_FW_UPD_EN.7z.&lt;/li&gt;&lt;li&gt;Instale o msxml.msi que está dentro do arquivo do KDZ.&lt;/li&gt;&lt;li&gt;Com o telefone desligado e desconectado da porta usb, segure as teclas de aumentar volume, baixar volume e ligar ao mesmo tempo.&lt;/li&gt;&lt;li&gt;O telefone vai iniciar em modo de emergência.&lt;/li&gt;&lt;li&gt;Conecte o telefone no micro pela porta USB.&lt;/li&gt;&lt;li&gt;Passe o controle do dispositivo USB para o VirtualBox: No menu Dispositivos &amp;gt; Dispositivos USB, Marque o telefone LG.&lt;/li&gt;&lt;li&gt;Execute o programa &lt;b&gt;KDZ_FW_UPD.exe&lt;/b&gt;, que está dentro do arquivo do KDZ.&lt;/li&gt;&lt;li&gt;Selecione as opções&amp;nbsp; &lt;b&gt;3GQCT&lt;/b&gt;&amp;nbsp;no “Type” e &lt;b&gt;DIAG&lt;/b&gt;&amp;nbsp;no “PhoneMode”.&lt;/li&gt;&lt;li&gt;Selecione o arquivo do firmware (&lt;b&gt;V10C_00.KDZ&lt;/b&gt; no meu caso).&lt;/li&gt;&lt;li&gt;Inicie a atualização.&amp;nbsp;O post no qual eu me baseei diz que caso haja algum problema, pode-se tentar com o telefone sem a bateria.&lt;/li&gt;&lt;li&gt;No meio da atualização, o telefone é desligado. &lt;b&gt;O controle do dispositivo deve novamente ser passado para o VirtualBox&lt;/b&gt; (Dispositivos &amp;gt; Dispositivos USB, como anteriormente). Não sei quanto tempo você tem para fazer isso antes que o KDZ desista, portanto, esteja atento!&lt;/li&gt;&lt;li&gt;Agora ele deve ir até o fim...&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;A primeira vez que o telefone é ligado, demora bastante para iniciar. Paciência!&lt;/div&gt;&lt;div&gt;Ah, não esqueça de remover a linha no&amp;nbsp;/etc/modprobe.d/blacklist.conf.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Era isso.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2909211050817756519-3371889124095301401?l=luisfpg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://luisfpg.blogspot.com/feeds/3371889124095301401/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2909211050817756519&amp;postID=3371889124095301401' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/3371889124095301401'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/3371889124095301401'/><link rel='alternate' type='text/html' href='http://luisfpg.blogspot.com/2011/09/atualizando-o-firmware-do-lg-optimus-me.html' title='Atualizando o firmware do LG Optimus ME (P350) com VirtualBox no Linux'/><author><name>Luis Fernando</name><uri>http://www.blogger.com/profile/10369964459649811472</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-6BL3zQMFi84/TofJ6WdnhFI/AAAAAAAAAK8/cfVeC0G43lQ/s220/avatar%2BLuis%2B2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2909211050817756519.post-187895282846057294</id><published>2011-07-03T22:54:00.000-03:00</published><updated>2011-07-03T22:54:30.952-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='broadcom'/><category scheme='http://www.blogger.com/atom/ns#' term='kernel panic'/><title type='text'>The day I've faced a kernel panic in Linux</title><content type='html'>I've been tempted to switch back from Unity to KDE for several days.&lt;br /&gt;So, today I decided to actually do it.&lt;br /&gt;Everything was fine, then, at some point, after setting up everything, I restarted and...&lt;br /&gt;kernel panic!!!&lt;br /&gt;Wow. For those who haven't seen it, it kind of scares. The numlock and capslock leds on the keyboard keep blinking and nothing else works.&lt;br /&gt;I rebooted again. Same thing. Then again. Sometimes, it was even a hard freeze: not even the blinking leds.&lt;br /&gt;All this happened right after entering the login password in KDM.&lt;br /&gt;Then, I just decided to reinstall everything (I had just installed kubuntu-desktop and uninstalled everything from gnome, as explained &lt;a href="http://www.psychocats.net/ubuntu/purekde"&gt;here&lt;/a&gt;.&lt;br /&gt;After reinstalling, upgrading, configuring... Guess what?&lt;br /&gt;The same thing.&lt;br /&gt;Then I just realized it was when connecting to the wireless network that the system froze.&lt;br /&gt;So, my guess was the wireless card driver. Bingo!!!&lt;br /&gt;I have a Dell Vostro 3300, which comes with a Broadcom &amp;nbsp;BCM4313 board. The default driver for it is brcm80211.&lt;br /&gt;I had seen several days before in the Hardware Drivers program that another driver was available for it: Broadcom STA driver.&lt;br /&gt;As I had nothing to loose, I just tried, and it worked! \o/&lt;br /&gt;So, here is my tip if anyone encounters a hard freeze or a kernel panic and has the same hardware: install the Broadcom STA driver!&lt;br /&gt;Just as a note, neither KDE nor Kubuntu are to blame here: it was the wireless driver's fault.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2909211050817756519-187895282846057294?l=luisfpg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://luisfpg.blogspot.com/feeds/187895282846057294/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2909211050817756519&amp;postID=187895282846057294' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/187895282846057294'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/187895282846057294'/><link rel='alternate' type='text/html' href='http://luisfpg.blogspot.com/2011/07/day-ive-faced-kernel-panic-in-linux.html' title='The day I&apos;ve faced a kernel panic in Linux'/><author><name>Luis Fernando</name><uri>http://www.blogger.com/profile/10369964459649811472</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-6BL3zQMFi84/TofJ6WdnhFI/AAAAAAAAAK8/cfVeC0G43lQ/s220/avatar%2BLuis%2B2.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2909211050817756519.post-5300589398059601223</id><published>2011-05-10T09:43:00.000-03:00</published><updated>2011-05-10T09:43:51.167-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='internet explorer'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='smiles'/><title type='text'>Não usa Internet Explorer? Você não é mais bem-vindo ao www.smiles.com.br</title><content type='html'>Sou usuário Linux (o último Windows que usei foi o XP).&lt;br /&gt;&lt;br /&gt;Até algum tempo atrás eu acessava sem problemas o site do Smiles (www.smiles.com.br).&lt;br /&gt;&lt;br /&gt;Este fim-de-semana tentei acessar e me deparei com um erro, dizendo que eu precisava usar o Microsoft Internet Explorer.&lt;br /&gt;&lt;br /&gt;Desiludido, entrei em contato com o "Fale conosco", e, realmente desisti do site.&lt;br /&gt;&lt;br /&gt;Me mandaram baixar o Internet Explorer para o meu sistema operacional...&lt;br /&gt;&lt;br /&gt;Credo.&lt;br /&gt;&lt;br /&gt;Em pleno 2011 ver sites importantes depender de uma plataforma específica é algo que só se explica com ignorância ou mala preta...&lt;br /&gt;&lt;br /&gt;Aqui o e-mail na íntegra (salvo os dados pessoais):&lt;br /&gt;&lt;br /&gt;&lt;div style="background-color:#f0f0f0;color:black;padding:5px;font-family:monospace;font-size:small;"&gt;Prezado Senhor Luis Fernando:&lt;br /&gt;&lt;br /&gt;N° de atendimento: 1-412064905.&lt;br /&gt;&lt;br /&gt;Em atenção ao seu e-mail, orientamos verificar e se possível, baixar uma versão do navegador Internet Explorer compatível com seu sistema operacional, pois terá um melhor desempenho durante o acesso ao site Smiles.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Esclarecemos que estamos trabalhando incessantemente para a melhoria de nosso atendimento, com atualizações de sistemas e o Site Smiles.&lt;br /&gt;&lt;br /&gt;Pedimos sua compreensão.&lt;br /&gt;&lt;br /&gt;Estamos à sua disposição.&lt;br /&gt; &lt;br /&gt;Atenciosamente,&lt;br /&gt; &lt;br /&gt;Janaina Oliveira &lt;br /&gt;Programa Smiles&lt;br /&gt;VRG Linhas Aéreas S.A - Grupo GOL&lt;br /&gt;www.smiles.com.br/smiles/content/faleconosco/index.htm&lt;br /&gt;Central de Atendimento Smiles: 4003 7001 / 4003 7007&lt;br /&gt;Para localidades não atendidas pelo serviço 4003 ligue para 0800-883-2245.&lt;br /&gt; &lt;br /&gt;Favor não responder esta mensagem, caso seja necessário utilize Site “www.smiles.com.br”   “My Smiles” “Fale Conosco”, ou utilize o link abaixo. “http://www.smilescom.br/smiles/content/faleconosco/index.htm”.&lt;br /&gt; &lt;br /&gt;Texto confidencial para uso exclusivo do destinatário. Não divulgue e apague-o imediatamente se o recebeu por engano.&lt;br /&gt;This is a confidential text to be exclusively used by the recipient. Do not disclose to anybody and delete it immediately if you received it by mistake.&lt;br /&gt;Texto confidencial para uso exclusivo del destinatario. Si usted lo recibi por error no lo divulgue y exclúyalo inmediatamente&lt;br /&gt;Antes de imprimir, pense em sua responsabilidade com o MEIO AMBIENTE.&lt;br /&gt;&lt;br /&gt;----- Mensagem Original -----&lt;br /&gt;De: smilesfaleconosco@golnaweb.com.br&lt;br /&gt;Para: smiles.portugues@golnaweb.com.br&lt;br /&gt;Enviada em: 09/05/2011 10:15:59&lt;br /&gt;Assunto: Fale Conosco: Crítica&lt;br /&gt;&lt;br /&gt;Fale Conosco - Crítica&lt;br /&gt;&lt;br /&gt;Assunto: SITE&lt;br /&gt;&lt;br /&gt;Nome: Luis Fernando&lt;br /&gt;&lt;br /&gt;Sobrenome: Planella Gonzalez&lt;br /&gt;&lt;br /&gt;CPF: XXXXXXX&lt;br /&gt;&lt;br /&gt;E-mail: XXXXXXX&lt;br /&gt;&lt;br /&gt;Numero Smiles: XXXXXXX&lt;br /&gt;&lt;br /&gt;Contato: XXXXXXX&lt;br /&gt;&lt;br /&gt;Localizador:  &lt;br /&gt;&lt;br /&gt;Origem: &lt;br /&gt;&lt;br /&gt;Destino: &lt;br /&gt;&lt;br /&gt;Data do vôo: &lt;br /&gt;&lt;br /&gt;Número do vôo: &lt;br /&gt;&lt;br /&gt;Data de ocorrência: &lt;br /&gt;&lt;br /&gt;Número Protocolo: &lt;br /&gt;&lt;br /&gt;Comentários: É lamentável que não posso mais acessar minha conta no Smiles porque agora o site exige o uso do Microsoft Internet Explorer.&lt;br /&gt;De onde vocês tiraram a ideia infeliz de restringir o acesso a esse navegador, que é sabidamente o mais inseguro de todos?&lt;br /&gt;Sou usuario Linux. Além de me excluir, excluiram os usuarios Mac, iPhone, iPad, Android, Blackbarry ou qualquer coisa que não seja Windows.&lt;br /&gt;Vocês tomaram um passo na contramão da tecnologia, e, apesar de duvidar que isto possa ser solucionado a curto prazo (porque provavelmente investiram milhões no novo sistema mais "seguro"), pelo bem da própria empresa, espero que isto seja mudado algum dia.&lt;br /&gt;As 40.000 milhas que tenho no programa (que ainda não consegui utilizar) serão as últimas investidas no smiles. &lt;br /&gt;Lamentável.&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/2909211050817756519-5300589398059601223?l=luisfpg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://luisfpg.blogspot.com/feeds/5300589398059601223/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2909211050817756519&amp;postID=5300589398059601223' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/5300589398059601223'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/5300589398059601223'/><link rel='alternate' type='text/html' href='http://luisfpg.blogspot.com/2011/05/nao-usa-internet-explorer-voce-nao-e.html' title='Não usa Internet Explorer? Você não é mais bem-vindo ao www.smiles.com.br'/><author><name>Luis Fernando</name><uri>http://www.blogger.com/profile/10369964459649811472</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-6BL3zQMFi84/TofJ6WdnhFI/AAAAAAAAAK8/cfVeC0G43lQ/s220/avatar%2BLuis%2B2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2909211050817756519.post-7668617760283362189</id><published>2011-03-01T14:52:00.000-03:00</published><updated>2011-03-01T14:52:11.342-03:00</updated><title type='text'>An example of anti-code</title><content type='html'>When doing some code review, I've faced this:&lt;br /&gt;&lt;pre class="brush:javascript"&gt;var stateOptions = null;&lt;br /&gt;var typeOptions = null;&lt;br /&gt;&lt;br /&gt;function hideOptions() {&lt;br /&gt; if(stateOptions == null) {&lt;br /&gt;  stateOptions = new Array();&lt;br /&gt;  stateOptions[0] = document.getElementById('status').options[0];&lt;br /&gt;  stateOptions[1] = document.getElementById('status').options[1];&lt;br /&gt;  stateOptions[2] = document.getElementById('status').options[2];&lt;br /&gt;  stateOptions[3] = document.getElementById('status').options[3];&lt;br /&gt;  stateOptions[4] = document.getElementById('status').options[4];&lt;br /&gt;  stateOptions[5] = document.getElementById('status').options[5];&lt;br /&gt; }&lt;br /&gt; document.getElementById('status').remove(1);&lt;br /&gt; document.getElementById('status').remove(1);&lt;br /&gt; document.getElementById('status').remove(1); &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function showOptions() {&lt;br /&gt; document.getElementById('status').remove(0);&lt;br /&gt; document.getElementById('status').remove(0);&lt;br /&gt; document.getElementById('status').remove(0);&lt;br /&gt; try {&lt;br /&gt;  &lt;br /&gt;  document.getElementById('status').add(stateOptions[0], null);&lt;br /&gt;  document.getElementById('status').add(stateOptions[1], null);&lt;br /&gt;  document.getElementById('status').add(stateOptions[2], null);&lt;br /&gt;  document.getElementById('status').add(stateOptions[3], null);&lt;br /&gt;  document.getElementById('status').add(stateOptions[4], null);&lt;br /&gt;  document.getElementById('status').add(stateOptions[5], null);&lt;br /&gt;  &lt;br /&gt; } catch(ex) {&lt;br /&gt;  document.getElementById('status').add(stateOptions[0], 0);&lt;br /&gt;  document.getElementById('status').add(stateOptions[1], 1);&lt;br /&gt;  document.getElementById('status').add(stateOptions[2], 2);&lt;br /&gt;  document.getElementById('status').add(stateOptions[3], 3);&lt;br /&gt;  document.getElementById('status').add(stateOptions[4], 4);&lt;br /&gt;  document.getElementById('status').add(stateOptions[5], 5);&lt;br /&gt; } &lt;br /&gt;}&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;OMG&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2909211050817756519-7668617760283362189?l=luisfpg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://luisfpg.blogspot.com/feeds/7668617760283362189/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2909211050817756519&amp;postID=7668617760283362189' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/7668617760283362189'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/7668617760283362189'/><link rel='alternate' type='text/html' href='http://luisfpg.blogspot.com/2011/03/example-of-anti-code.html' title='An example of anti-code'/><author><name>Luis Fernando</name><uri>http://www.blogger.com/profile/10369964459649811472</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-6BL3zQMFi84/TofJ6WdnhFI/AAAAAAAAAK8/cfVeC0G43lQ/s220/avatar%2BLuis%2B2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2909211050817756519.post-177687728427623853</id><published>2011-02-14T00:09:00.002-02:00</published><updated>2011-02-14T08:33:08.067-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='unity'/><category scheme='http://www.blogger.com/atom/ns#' term='kde'/><category scheme='http://www.blogger.com/atom/ns#' term='gnome'/><title type='text'>I must admit: I was poisoned outside KDE...</title><content type='html'>After having an awful experience with KDE 4.5.0 (described &lt;a href="http://luisfpg.blogspot.com/2010/08/switching-to-gnome.html"&gt;here&lt;/a&gt;), I returned to it, as the performance issues were resolved (as I said &lt;a href="http://luisfpg.blogspot.com/2010/11/back-to-kde.html"&gt;here&lt;/a&gt;).&lt;br /&gt;However, after that experience, something has changed in me...&lt;br /&gt;I was a KDE lover. I found it way better in anything else. But after that...&lt;br /&gt;I've actually been using them both. Kubuntu (with KDE 4.6) at work and Ubuntu at home.&lt;br /&gt;The main point is: KDE's flagship technology is Plasma, which is the desktop, the panel and their widgets (and a few more things). The widgets... All I use is a single panel with a Kickoff menu, a task manager, a pager, a notification area and a clock. Pretty basic, I know. But that's all I need. No desktop widgets. Just a clean desktop and a simple panel.&lt;br /&gt;Kind of, KDE 4, with all it's technologies, is like an overkill.&lt;br /&gt;On the other hand, I never liked GNOME too much. But it gets better with DockbarX and Gnomenu, though ;-)&lt;br /&gt;I must say I'm currently not 100% satisfied by neither KDE nor GNOME.&lt;br /&gt;However, a new kid on the block is getting my attention: Canonical's Unity. The current Maverick netbook interface sucks. It's very slow. But the one shaping up for Natty (to be released in April) is the one I'm looking forward. I've tested the Unity 2D in the current Ubuntu, and it's very fast. And has everything I need: a simple panel and a nice launcher / task manager. Besides, it's beautiful.&lt;br /&gt;Unity has a long way to go, as there's are still 1 alpha and 2 betas before the final launch. I'm really, really anxious to see how Unity will behave as my main desktop in a few months...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2909211050817756519-177687728427623853?l=luisfpg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://luisfpg.blogspot.com/feeds/177687728427623853/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2909211050817756519&amp;postID=177687728427623853' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/177687728427623853'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/177687728427623853'/><link rel='alternate' type='text/html' href='http://luisfpg.blogspot.com/2011/02/i-must-admit-i-was-poisoned-outside-kde.html' title='I must admit: I was poisoned outside KDE...'/><author><name>Luis Fernando</name><uri>http://www.blogger.com/profile/10369964459649811472</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-6BL3zQMFi84/TofJ6WdnhFI/AAAAAAAAAK8/cfVeC0G43lQ/s220/avatar%2BLuis%2B2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2909211050817756519.post-261060140061128913</id><published>2011-02-06T15:31:00.008-02:00</published><updated>2011-02-12T19:23:36.096-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sql'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='qureydsl'/><title type='text'>Using Querydsl SQL to handle persistence in Java programs</title><content type='html'>After several years working with Hibernate (since version 1.X - about 2001/2002) and then JPA, I'm quite convinced that for new projects I'd try a new approach: &lt;a href="http://www.querydsl.com/"&gt;Querydsl&lt;/a&gt; SQL. Why? Well, Even though full ORM solutions like Hibernate have several advantages (managing relationships, an easier query language and so on), they also have their drawbacks. I found out that: &lt;br /&gt;&lt;ul&gt;&lt;li&gt;What I really wanted is an easier way to manipulate databases / resultsets;&lt;/li&gt;&lt;li&gt;It always selects all attributes when dealing with entities. I know you CAN select individual attributes, but this is more an exception than a rule. People tend to just read the entire record, and then accessing the needed attributes. Some argue that this is not something which impacts performance, but after some fine tuning on my current project, I realized that every gain matters;&lt;/li&gt;&lt;li&gt;Pure OO in data manipulation is nice, but the &lt;a href="http://en.wikipedia.org/wiki/Object-relational_impedance_mismatch"&gt;impedance mismatch&lt;/a&gt; just can't be negleted. It will bite you sooner or later;&lt;/li&gt;&lt;li&gt;You always end up with a few cases where native query is needed, or the performance is just not acceptable. I think that programs are coded by developers, but those who really needed to be pleased are the end users. And poor performance just produces bad mood on users;&lt;/li&gt;&lt;li&gt;Even though JPA 2 has most of the features Hibernate has, it brings a problem: Just like most (all?) JCP specifications, it always has points left out of the specification. So, having a (relatively complex) system working with a JPA provider (say, Hibernate) and migrating it to another one (EclipseLink, OpenJPA, ...) is not failproof. This just leads to frustration...&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Ok, I know no framework / library / technology is perfect, but I think Querydsl SQL is quite promising. Here are a few points:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;You have full power of native queries, with type-safe queries. Java classes are generated based on the database tables, so you have the full power of IDE's (autocomplete, finding references, code analysis...). This is a boost on productivity;&lt;/li&gt;&lt;li&gt;Queries can return several types of data, like iterators, lists, maps or single objects. The projection type can be beans, arrays, tuples or custom expressions. Querydsl is very easy to extended;&lt;/li&gt;&lt;li&gt;It can also handle data manipulation (inserts, updates and deletes). This kind of removes all cases one would need to touch the connection;&lt;/li&gt;&lt;li&gt;Besides to generating the Q-types (Java classes representing the database tables), it is also possible to generate beans (DTOs) for the tables. This is nice for cases where you want all columns of the table, but optional. Using them can boost the productivity, as avoids having to create each bean by hand.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;So, enough talking! Let's take a look on some code. The example here is of a simple blog: We have users, which can create posts and commenting existing posts. So, here is the DDL for MySQL:&lt;br /&gt;&lt;pre class="brush:sql"&gt;drop table if exists comment;&lt;br /&gt;drop table if exists post;&lt;br /&gt;drop table if exists user;&lt;br /&gt;&lt;br /&gt;create table user (&lt;br /&gt;    id bigint not null,&lt;br /&gt;    name varchar(100) not null,&lt;br /&gt;    username varchar(20) not null,&lt;br /&gt;    password varchar(20) not null,&lt;br /&gt;    primary key (id)&lt;br /&gt;) engine innodb;&lt;br /&gt;&lt;br /&gt;create table post (&lt;br /&gt;    id bigint not null,&lt;br /&gt;    user_id bigint not null,&lt;br /&gt;    title varchar(250) not null,&lt;br /&gt;    date datetime not null,&lt;br /&gt;    contents text not null,&lt;br /&gt;    primary key (id),&lt;br /&gt;    constraint fk_post_user foreign key (user_id) references user(id)&lt;br /&gt;) engine innodb;&lt;br /&gt;&lt;br /&gt;create table comment (&lt;br /&gt;    id bigint not null,&lt;br /&gt;    user_id bigint not null,&lt;br /&gt;    post_id bigint not null,&lt;br /&gt;    date datetime not null,&lt;br /&gt;    comments text not null,&lt;br /&gt;    primary key (id),&lt;br /&gt;    constraint fk_comment_user foreign key (user_id) references user(id),&lt;br /&gt;    constraint fk_comment_post foreign key (post_id) references post(id)&lt;br /&gt;) engine innodb;&lt;/pre&gt;&lt;br /&gt;So, we need to invoke Querydsl to read the database tables and generate the Java classes. Beans will be generated as well:&lt;br /&gt;&lt;pre class="brush:java"&gt;Configuration configuration = new Configuration(new MySQLTemplates());&lt;br /&gt;NamingStrategy namingStrategy = new DefaultNamingStrategy();&lt;br /&gt;MetaDataExporter exporter = new MetaDataExporter();&lt;br /&gt;exporter.setConfiguration(configuration);&lt;br /&gt;exporter.setNamePrefix("Q");&lt;br /&gt;exporter.setTargetFolder(new File("generated"));&lt;br /&gt;exporter.setSerializer(new MetaDataSerializer("Q", namingStrategy));&lt;br /&gt;exporter.setBeanSerializer(new BeanSerializer());&lt;br /&gt;exporter.setNamingStrategy(namingStrategy);&lt;br /&gt;exporter.setPackageName("demo.blog");&lt;br /&gt;        &lt;br /&gt;Connection connection = ... //Get connection&lt;br /&gt;exporter.export(connection.getMetaData());&lt;/pre&gt;&lt;br /&gt;If you are in Eclipse, just refresh the project and add the &lt;i&gt;generated&lt;/i&gt; folder as source folder. There you will find the QUser, QPost and QComment classes, as well as the beans: User, Post and Comment.&lt;br /&gt;&lt;br /&gt;Before showing some data manipulation code, here are some methods used by the examples (the configuration can be created the same way as in the example above):&lt;br /&gt;&lt;pre class="brush:java"&gt;SQLDeleteClause delete(RelationalPath path) {&lt;br /&gt;    return new SQLDeleteClause(&lt;br /&gt;        getConnection(), getConfiguration(), path);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;SQLQuery from(Expression from) {&lt;br /&gt;    SQLQueryImpl query = new SQLQueryImpl(&lt;br /&gt;        getConnection(), getConfiguration());&lt;br /&gt;    query.from(from);&lt;br /&gt;    return query;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;SQLInsertClause insert(RelationalPath path) {&lt;br /&gt;    return new SQLInsertClause(&lt;br /&gt;        getConnection(), getConfiguration(), path);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;SQLUpdateClause update(RelationalPath path) {&lt;br /&gt;    return new SQLUpdateClause(&lt;br /&gt;        getConnection(), getConfiguration(), path);&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;So, here are some examples for manipulating data:&lt;br /&gt;&lt;pre class="brush:java"&gt;QUser user = QUser.user; //Generated Q-type&lt;br /&gt;&lt;br /&gt;// Create an user&lt;br /&gt;User john = new User();&lt;br /&gt;john.setName("John Smith");&lt;br /&gt;john.setUsername("jsmith");&lt;br /&gt;john.setPassword("john_secret");&lt;br /&gt;Long johnId = insert(user)&lt;br /&gt;    .populate(john)&lt;br /&gt;    .executeWithKey(user.id);&lt;br /&gt;john.setId(johnId);&lt;br /&gt;&lt;br /&gt;// Create a post&lt;br /&gt;QPost post = QPost.post;&lt;br /&gt;Post newPost = new Post();&lt;br /&gt;newPost.setDate(new Date());&lt;br /&gt;newPost.setUserId(john.getId());&lt;br /&gt;newPost.setTitle("A very interesting Java post!");&lt;br /&gt;newPost.setContents("For more posts, visit http://freeit.inf.br");&lt;br /&gt;Long postId = insert(post)&lt;br /&gt;    .popupate(newPost)&lt;br /&gt;    .executeWithKey(post.id);&lt;br /&gt;newPost.setId(postId);&lt;br /&gt;&lt;br /&gt;// Without using generated beans&lt;br /&gt;Long maryId = 10L;&lt;br /&gt;QComment comment = QComment.comment;&lt;br /&gt;insert(comment)&lt;br /&gt;    .set(comment.date, new Date())&lt;br /&gt;    .set(comment.postId, post.getId())&lt;br /&gt;    .set(comment.userId, maryId)&lt;br /&gt;    .set(comment.comments, "Love your post... Keep on!")&lt;br /&gt;    .execute();&lt;br /&gt;&lt;br /&gt;// Then, john decides to edit the post title&lt;br /&gt;update(post)&lt;br /&gt;    .set(post.title, "Using Querydsl...")&lt;br /&gt;    .set(post.contents, post.contents.concat("\\n\\n[updated]"))&lt;br /&gt;    .where(post.id.eq(post.getId()))&lt;br /&gt;    .execute();&lt;br /&gt;&lt;br /&gt;// And Mary removes all her comments on all posts!&lt;br /&gt;delete(comment)&lt;br /&gt;    .where(comment.userId.eq(maryId)&lt;br /&gt;    .execute();&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Enough DML examples. Let's perform some queries (using the same user, post and comment variables from above):&lt;br /&gt;&lt;pre class="brush:java"&gt;//Listing comments using the generated bean&lt;br /&gt;List&amp;lt;Comment&amp;gt; postComments = &lt;br /&gt;    from(comment)&lt;br /&gt;    .where(comment.postId.eq(postId))&lt;br /&gt;    .list(comment);&lt;br /&gt;&lt;br /&gt;//Iterating through all users with comments&lt;br /&gt;CloseableIterator&amp;lt;User&amp;gt; usersWithComments = &lt;br /&gt;    from(user)&lt;br /&gt;    .rightJoin(comment.commentUserFk, user)&lt;br /&gt;    .where(comment.id.isNotNull())&lt;br /&gt;    .iterateDistinct(user);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;On the last example, it's possible to see that even the foreign keys are imported into the model, and can be used on joins. You can also use subqueries, factory expressions to invoke custom SQL functions and so on. Visit &lt;a href="http://www.querydsl.com/"&gt;www.querydsl.com&lt;/a&gt; for documentation and downloads.&lt;br /&gt;&lt;br /&gt;So, here is my tip. If you are looking for an alternative in data access in Java, give Querydsl SQL a try.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2909211050817756519-261060140061128913?l=luisfpg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://luisfpg.blogspot.com/feeds/261060140061128913/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2909211050817756519&amp;postID=261060140061128913' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/261060140061128913'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/261060140061128913'/><link rel='alternate' type='text/html' href='http://luisfpg.blogspot.com/2011/02/using-querydsl-sql-to-handle.html' title='Using Querydsl SQL to handle persistence in Java programs'/><author><name>Luis Fernando</name><uri>http://www.blogger.com/profile/10369964459649811472</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-6BL3zQMFi84/TofJ6WdnhFI/AAAAAAAAAK8/cfVeC0G43lQ/s220/avatar%2BLuis%2B2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2909211050817756519.post-7703076975999578440</id><published>2011-01-08T00:00:00.001-02:00</published><updated>2011-01-23T22:31:02.421-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='ejb'/><category scheme='http://www.blogger.com/atom/ns#' term='jaas'/><title type='text'>My [terrible] experiences with EJB</title><content type='html'>In the past (around 2004), I had worked with &lt;a href="http://www.oracle.com/technetwork/java/ejb-141389.html"&gt;EJB&lt;/a&gt; 2. I hated it. Too much xml, too much complexity. Home / remote / local interfaces... So, at the time, as a workaround, I built a framework which implemented the command pattern, having a single EJB deployed, and passing the command and parameters for it. Not good.&lt;br /&gt;Then, in my current project, we started with EJB 3 (in late-2008). Mostly because it's &lt;i&gt;standard&lt;/i&gt;. It is surely much easier, with annotations and such. However, the project has security requirements way beyond the standard &lt;a href="http://download.oracle.com/javase/6/docs/technotes/guides/security/jaas/JAASRefGuide.html"&gt;JAAS&lt;/a&gt; can handle. Besides roles (the only concept handled by JAAS in EJBs), we have permission sets, which can be applied to either groups or individual users, and they can be dynamically changed by the application admins. So we had to create some sort of custom mechanism to check permissions. However, we still need JAAS to propagate the user identity (we use remote EJB interfaces).&lt;br /&gt;Ok, but why am I so disappointed with EJBs? Here are some points:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;To propagate the caller identity we need JAAS. It is insufficient to the application I'm working on (and would be too for some others which I had already worked, so, either I'm too unlucky or the standard is weak).&lt;/li&gt;&lt;li&gt;Again on JAAS: For the application side, it's standard. However, for every application server out there, there is a distinct way to configure it. Ok, for applications which find users and plain or hashed passwords in a DB table, probably there is an easy way to configure some sort of login module with an SQL query. However, in our application, the credentials are dynamic as well, depends on the application configuration and on the application channel being accessed, and, as logic to validate all those is on the application, I'd like to use the application itself to validate users. However, in some containers, it's quite complicated to invoke the application to validate users. Go figure...&amp;nbsp;&lt;/li&gt;&lt;li&gt;Once again on JAAS: Because the JAAS configuration is specific for each application server, it's virtually impossible to just deploy an application in more than one application server without headache. So, if you code your application in an &lt;i&gt;standard&lt;/i&gt; way, and cannot reliably deploy that same application on distinct &lt;i&gt;standard-compliant&lt;/i&gt;&amp;nbsp;application servers, then that standard is void and defective by design. In the other hand, a self-contained web application can be deployed on ANY web container (as long as you don't use that little friend, JAAS).&lt;/li&gt;&lt;li&gt;Application servers take a lot of time to startup and deploy the application. Even though they are faster than some years ago, they are still slow. Compare the startup time with a simple web application running on a &lt;a href="http://tomcat.apache.org/"&gt;Tomcat&lt;/a&gt; or &lt;a href="http://jetty.codehaus.org/jetty/"&gt;Jetty&lt;/a&gt; - just (very) few seconds.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.jcp.org/en/jsr/detail?id=317"&gt;JPA&lt;/a&gt; has it's share of guilty in the slow startup times. For the current project, &lt;a href="http://www.hibernate.org/"&gt;Hibernate&lt;/a&gt; alone takes about 30-40 seconds to map every entity (about 200 tables).&lt;/li&gt;&lt;li&gt;The runtime performance for EJBs is also likely to be slower than a regular web applications. You can cluster, I know. But there are way too much proxies, interceptors, lookups, injections... I can't prove with numbers. But common sense tells me that.&lt;/li&gt;&lt;li&gt;The &lt;i&gt;standard&lt;/i&gt; API for type-safe queries in JPA (criteria API) is an abomination. But I had &lt;a href="http://luisfpg.blogspot.com/2010/05/jpa-2-criteria.html"&gt;already discussed&lt;/a&gt; that, and solved it by using&amp;nbsp;&lt;a href="http://source.mysema.com/display/querydsl/Querydsl"&gt;Querydsl&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Conclusions? For future projects I'll try to avoid EJBs as much as possible. Spring is likely to always be in the game for me, as it's a fantastic piece of software. Also, after so many years working with Hibernate (since 1.2.x) and later JPA, I'm pretty sure I would likely choose &lt;a href="http://source.mysema.com/display/querydsl/Querydsl"&gt;Querydsl&lt;/a&gt; SQL mode, which has no ORM, but has type-safe queries and DMLs (insers / updates / deletes). Also, it's metamodel is generated at compilation time, it has almost zero overhead on the application initialization (Hibernate as already stated, for us, takes 30-40 seconds just to initialize the persistence).&lt;br /&gt;That is the beauty (but also for me, as a software architect, a frustration) of Java development. You have thousands of frameworks and libraries to choose from, and when most non-trivial projects are finished and set to production, they already use legacy technologies.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2909211050817756519-7703076975999578440?l=luisfpg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://luisfpg.blogspot.com/feeds/7703076975999578440/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2909211050817756519&amp;postID=7703076975999578440' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/7703076975999578440'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/7703076975999578440'/><link rel='alternate' type='text/html' href='http://luisfpg.blogspot.com/2011/01/my-terrible-experiences-with-ejb.html' title='My [terrible] experiences with EJB'/><author><name>Luis Fernando</name><uri>http://www.blogger.com/profile/10369964459649811472</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-6BL3zQMFi84/TofJ6WdnhFI/AAAAAAAAAK8/cfVeC0G43lQ/s220/avatar%2BLuis%2B2.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2909211050817756519.post-6566485625916531240</id><published>2010-11-18T17:01:00.000-02:00</published><updated>2010-11-18T17:01:32.123-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='kde'/><title type='text'>Back to KDE</title><content type='html'>After the &lt;a href="http://luisfpg.blogspot.com/2010/08/switching-to-gnome.html"&gt;last post&lt;/a&gt;, may things have changed...&lt;br /&gt;I've given KDE another try, and... I'm back!!!&lt;br /&gt;They've managed to fix the performance problems I had with 4.5.0.&lt;br /&gt;Whew! I was really missing my favorite desktop environment.&lt;br /&gt;If you had similar problems, give KDE another chance... It's better than ever!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2909211050817756519-6566485625916531240?l=luisfpg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://luisfpg.blogspot.com/feeds/6566485625916531240/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2909211050817756519&amp;postID=6566485625916531240' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/6566485625916531240'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/6566485625916531240'/><link rel='alternate' type='text/html' href='http://luisfpg.blogspot.com/2010/11/back-to-kde.html' title='Back to KDE'/><author><name>Luis Fernando</name><uri>http://www.blogger.com/profile/10369964459649811472</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-6BL3zQMFi84/TofJ6WdnhFI/AAAAAAAAAK8/cfVeC0G43lQ/s220/avatar%2BLuis%2B2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2909211050817756519.post-4948928494778559378</id><published>2010-08-15T21:28:00.000-03:00</published><updated>2010-08-15T21:28:16.855-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='kde'/><category scheme='http://www.blogger.com/atom/ns#' term='lucid'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='gnome'/><title type='text'>Switching to GNOME?!?</title><content type='html'>Things DO change. After years using KDE exclusively, I've now switched to GNOME both at work and at home.&lt;br /&gt;My complaint has always been that GNOME was ugly.&lt;br /&gt;However, the Ayatana guys (which are responsive to the appearance of Ubuntu) are doing a remarkable job.&lt;br /&gt;I had kind of getting a bit upset a bit with KDE, and after installing KDE 4.5 on Kubuntu Lucid, a Core 2 Duo with 4GB of RAM started to feel sluggish... That was too much... Kwin, for example, was always using about 15% CPU, even when nothing special was happening. &lt;br /&gt;There was nothing which I had really liked in KDE 4.5, for me, it was only slower!&lt;br /&gt;So I decided to give Ubuntu Lucid a try, and liked it!&lt;br /&gt;So far so good. Let's see how much will I stick with it...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2909211050817756519-4948928494778559378?l=luisfpg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://luisfpg.blogspot.com/feeds/4948928494778559378/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2909211050817756519&amp;postID=4948928494778559378' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/4948928494778559378'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/4948928494778559378'/><link rel='alternate' type='text/html' href='http://luisfpg.blogspot.com/2010/08/switching-to-gnome.html' title='Switching to GNOME?!?'/><author><name>Luis Fernando</name><uri>http://www.blogger.com/profile/10369964459649811472</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-6BL3zQMFi84/TofJ6WdnhFI/AAAAAAAAAK8/cfVeC0G43lQ/s220/avatar%2BLuis%2B2.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2909211050817756519.post-4455033418219391328</id><published>2010-05-16T19:41:00.000-03:00</published><updated>2010-05-16T19:41:09.505-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><category scheme='http://www.blogger.com/atom/ns#' term='globo.bom'/><category scheme='http://www.blogger.com/atom/ns#' term='adblock'/><title type='text'>Vídeos do globo.com no Firefox e o AdBlock Plus</title><content type='html'>Uma dica: Quem usa o Firefox e tem o AdBlock instalado, e não consegue ver vídeos no globo.com, deve desativar a extensão neste site. Para isso, tem um ícone ABP. Desative o AdBlock Plus no globo.com e pronto! Os vídeos voltaram!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2909211050817756519-4455033418219391328?l=luisfpg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://luisfpg.blogspot.com/feeds/4455033418219391328/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2909211050817756519&amp;postID=4455033418219391328' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/4455033418219391328'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/4455033418219391328'/><link rel='alternate' type='text/html' href='http://luisfpg.blogspot.com/2010/05/videos-do-globocom-no-firefox-e-o.html' title='Vídeos do globo.com no Firefox e o AdBlock Plus'/><author><name>Luis Fernando</name><uri>http://www.blogger.com/profile/10369964459649811472</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-6BL3zQMFi84/TofJ6WdnhFI/AAAAAAAAAK8/cfVeC0G43lQ/s220/avatar%2BLuis%2B2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2909211050817756519.post-7015515033045023678</id><published>2010-05-12T22:21:00.005-03:00</published><updated>2010-12-21T09:50:08.489-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jpa'/><category scheme='http://www.blogger.com/atom/ns#' term='criteria'/><category scheme='http://www.blogger.com/atom/ns#' term='querydsl'/><title type='text'>JPA 2 Criteria</title><content type='html'>One of the most expected features in JPA 2 is a Criteria API. Something that Hibernate has had for ages, but a notable absence in JPA 1.&lt;br /&gt;&lt;br /&gt;Even better, JPA 2 criteria is compiled (generated from the source code) and type safe. So, for example, whenever an attribute is removed or changed on the entity, the queries stop compiling immediately, instead of having to wait until the application is running to detect errors. Neat, huh?&lt;br /&gt;&lt;br /&gt;However, there's a problem. The way it is, queries are unusable. Well, usable, but very, VERY hard to code, read and maintain. Not for the &lt;a href="http://jcp.org/en/jsr/detail?id=317"&gt;JSR 317 expert group&lt;/a&gt;, of course, but everyone I've asked, has the same opinion as me.&lt;br /&gt;&lt;br /&gt;Take a look (example extracted from &lt;a href="http://source.mysema.com/forum/mvnforum/viewthread_thread,49"&gt;this link&lt;/a&gt;, with little changes):&lt;br /&gt;&lt;pre&gt;CriteriaBuilder builder = em.getCriteriaBuilder();&lt;br /&gt;CriteriaQuery&amp;lt;Person&amp;gt; criteria = builder.createQuery(&lt;br /&gt;    Person.class);&lt;br /&gt;Root&amp;lt;Person&amp;gt; personRoot = criteria.from(Person.class);&lt;br /&gt;criteria.select(personRoot);&lt;br /&gt;ParameterExpression&amp;lt;String&amp;gt; eyeColorParam = builder.&lt;br /&gt;    parameter(String.class);&lt;br /&gt;criteria.where(builder.equal(personRoot.get(&lt;br /&gt;    Person_.eyeColor), eyeColorParam));&lt;br /&gt;TypedQuery&amp;lt;Person&amp;gt; query = em.createQuery(criteria);&lt;br /&gt;query.setParameter(eyeColorParam, "brown");&lt;br /&gt;List&amp;lt;Person&amp;gt; people = query.getResultList();&lt;/pre&gt;&lt;br /&gt;Is this example anything close to 'easy'? The very same query in JPQL would be:&lt;br /&gt;&lt;pre&gt;String jpql =&amp;nbsp;&lt;br /&gt;    "select p from Person p where p.eyeColor = :eyeColor";&lt;br /&gt;TypedQuery&amp;lt;Person&amp;gt; query =&lt;br /&gt;    em.createQuery(jpql, Person.class);&lt;br /&gt;query.setParameter("eyeColor", "brown");&lt;br /&gt;List&amp;lt;Person&amp;gt; people = query.getResultList();&lt;/pre&gt;&lt;br /&gt;To make things a bit worse, the &lt;i&gt;Query&lt;/i&gt; object returned from the &lt;i&gt;em.createQuery(criteria)&lt;/i&gt; never has parameters already set. And parameters are only used when a &lt;i&gt;ParameterExpression&lt;/i&gt; is created. Otherwise, the values are passed as literals (so, subject to things like SQL injection). Yikes! There's absolutely no reason for this. Even the plain old Hibernate criteria already converted given literals to bind parameters...&lt;br /&gt;&lt;br /&gt;C'mon, how could an expert group do such terrible decisions, impacting the lives of thousands Java programmers out there having to live with this abomination?&lt;br /&gt;&lt;br /&gt;Thanks God, there is a very nice solution. It's &lt;a href="http://source.mysema.com/display/querydsl/Querydsl"&gt;Querydsl&lt;/a&gt;. It has the main advantage of JPA 2 criteria: being type safe (an annotation processor is used to generate a meta model which is used on queries), uses &lt;a href="http://en.wikipedia.org/wiki/Fluent_interface"&gt;fluent interfaces&lt;/a&gt; (code is very readable) and generates queries with bind parameters on all expressions. The Querydsl metamodel has a &lt;i&gt;Q&lt;/i&gt; prefix, for example, &lt;i&gt;QEntity&lt;/i&gt;, instead of JPA's &lt;i&gt;Entity_&lt;/i&gt;. So, let's take a look on the same previous example in Querydsl:&lt;br /&gt;&lt;pre&gt;JPAQuery query = new JPAQuery(em);&lt;br /&gt;QPerson person = QPerson.person;&lt;br /&gt;List&amp;lt;Person&amp;gt; people = query.from(person)&lt;br /&gt;  .where(person.eyeColor.eq("brown"))&lt;br /&gt;  .list(person);&lt;/pre&gt;&lt;br /&gt;Now, that's readable!!! Also, in the project I'm working, I've also extended the query (actually, extending &lt;i&gt;AbstractJPAQuery&lt;/i&gt;) and added other useful methods, like &lt;i&gt;page(currentPage, pageSize)&lt;/i&gt;. Such things can't be done in JPA because all objects (&lt;i&gt;Query&lt;/i&gt;, &lt;i&gt;CriteriaQuery&lt;/i&gt;, &lt;i&gt;CriteriaBuilder&lt;/i&gt;) are interfaces given by the JPA provider, and can't be easily extended.&lt;br /&gt;&lt;br /&gt;So, here is my tip to anyone thinking about using a Criteria API: Give Querydsl a try! By the way, did I mention that it can also be used with &lt;i&gt;JDO&lt;/i&gt;, &lt;i&gt;Lucene&lt;/i&gt;, &lt;i&gt;JDBC&lt;/i&gt; and even plain collections?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2909211050817756519-7015515033045023678?l=luisfpg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://luisfpg.blogspot.com/feeds/7015515033045023678/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2909211050817756519&amp;postID=7015515033045023678' title='10 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/7015515033045023678'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/7015515033045023678'/><link rel='alternate' type='text/html' href='http://luisfpg.blogspot.com/2010/05/jpa-2-criteria.html' title='JPA 2 Criteria'/><author><name>Luis Fernando</name><uri>http://www.blogger.com/profile/10369964459649811472</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-6BL3zQMFi84/TofJ6WdnhFI/AAAAAAAAAK8/cfVeC0G43lQ/s220/avatar%2BLuis%2B2.jpg'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2909211050817756519.post-4841804797362272343</id><published>2010-04-08T17:44:00.005-03:00</published><updated>2010-04-08T17:52:44.957-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lucid'/><category scheme='http://www.blogger.com/atom/ns#' term='kubuntu'/><title type='text'>Dica: O que fazer após instalar o Kubuntu Linux</title><content type='html'>Como recentemente instalei o Kubuntu Lucid Lynx (beta 1) no meu netbook (tive que fazer &lt;a href="http://luisfpg.blogspot.com/2010/04/netbook-philco-phn-10103-e-o-linux.html"&gt;algumas intervenções&lt;/a&gt; para que o hardware funcionasse 100%), resolvi fazer uma compilação de coisas a se fazer após a instalação:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;A primeira dica começa ANTES da instalação: Achei o novo instalador do Lucid muito, mas MUITO lento! Então baixei o instalador mínimo (&lt;a href="http://cdimages.ubuntu.com/netboot/lucid/"&gt;http://cdimages.ubuntu.com/netboot/lucid/&lt;/a&gt;) - o arquivo boot.img.gz, e depois. Este modo de instalação é modo texto (mas com menus bem fáceis), e baixa todos os pacotes da internet. Para isso, requer uma conexão de rede por cabo (o wireless vai funcionar só depois de instalado). Para instalar dessa forma, faça o seguinte:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Conecte um pen drive (TODOS os dados serão removidos).&lt;/li&gt;&lt;li&gt;Abra um terminal.&lt;/li&gt;&lt;li&gt;Digite dmesg, e veja em qual device ele foi reconhecido (normalmente sdb ou sdc). Às vezes demora alguns segundos até aparecer.&lt;/li&gt;&lt;li&gt;Descompacte a imagem: gunzip boot.img.gz &lt;/li&gt;&lt;li&gt;Copie a imagem para o pen drive: sudo dd if=boot.img of=/dev/sdX (sendo o mesmo reportado no final do dmesg). CUIDADO! Se usar o dispositivo que é o HD, babaus para os seus dados!&lt;/li&gt;&lt;li&gt;Depois é só iniciar o micro com o pen drive conectado. Normalmente tem que entrar em um menu de boot na inicialização ou no setup.&lt;/li&gt;&lt;li&gt;É só seguir os passos, e, no fim, escolher qual "forma" sua instalação vai ser: ubuntu desktop, ubuntu netbook, kubuntu desktop (minha favorita!), kubuntu netbook (não gostei da interface), xubuntu, lubuntu, server, ...&lt;/li&gt;&lt;li&gt;Ao reiniciar a máquina, o sistema vai estar devidamente instalado e atualizado. Considero este método melhor do que baixar o iso e depois ainda ter que baixar várias atualizações.&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Instalar o suporte à tradução para o português: Configurações do Sistema (System Settings), Regional e Linguagem (Regional &amp;amp; Language), Instalar novo idioma (Install new language). Pacotes adicionais devem ser baixados. Depois, caso não esteja selecionado, selecione Português. Caso contrário, basta fechar. Aí, no Adicionar idioma (Add language), selecione Português do Brasil. Clique em aplicar. Será preciso sair do KDE e fazer login novamente para que todo o ambiente fique em português.&lt;/li&gt;&lt;li&gt;Instalação do firefox. O Kubuntu tem um instalador no Programas &amp;gt; Internet. Se quiser usar ele como navegador padrão, nas Configurações do sistema &amp;gt; Aplicativos padrão &amp;gt; Navegador web, selecione o firefox a partir do botão "...". Normalmente, também removo o Konqueror dos favoritos do menu e adiciono o Firefox.&lt;/li&gt;&lt;li&gt;Instalação de codecs de vídeos e flash: sudo apt-get install kubuntu-restricted-extras&lt;/li&gt;&lt;li&gt;Instalação do plugin java: Requer entrar no KPackageKit, configurações &amp;gt; Editar fontes de software &amp;gt; Outro software e marcar o repositório canonical partner. Depois, pode-se instalar o pacote com o sudo apt-get install sun-java6-plugin. ATENÇÃO: Não instale o java pelo KPackageKit, pois ele não sabe o que fazer quando os instaladores querem interagir com o usuário, e dá erro. Para instalar o java, é necessário aceitar sua licença. &lt;br /&gt;O Lucid por enquanto tem um bug, que mesmo com o pacote instalado, o firefox não enxerga o plugin. Para solucionar, rode: sudo ln -s /usr/lib/xulrunner-addons/plugins/libjavaplugin.so /usr/lib/mozilla/plugins&lt;/li&gt;&lt;li&gt;Instalação da biblioteca para ler DVDs de filmes, caso não seja um netbook: veja as instruções em &lt;a href="https://help.ubuntu.com/community/Medibuntu"&gt;https://help.ubuntu.com/community/Medibuntu&lt;/a&gt;. Basicamente:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Para sistemas 32 bits, instale o &lt;a href="http://packages.medibuntu.org/pool/free/libd/libdvdcss/libdvdcss2_1.2.9-2medibuntu4_i386.deb"&gt;http://packages.medibuntu.org/pool/free/libd/libdvdcss/libdvdcss2_1.2.9-2medibuntu4_i386.deb&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Para sistemas 64 bits, instale o &lt;a href="http://packages.medibuntu.org/pool/free/libd/libdvdcss/libdvdcss2_1.2.9-2medibuntu4_amd64.deb"&gt;http://packages.medibuntu.org/pool/free/libd/libdvdcss/libdvdcss2_1.2.9-2medibuntu4_amd64.deb&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Trocar o mouse para navegar em pastas com 2 clicks ao invés de 1: Configurações do sistema &amp;gt; Mouse e Teclado &amp;gt; Mouse &amp;gt; Clique duplo para abrir arquivos e pastas.&lt;/li&gt;&lt;li&gt;Instalar o Skype: Baixe o skype em &lt;a href="http://www.skype.com/"&gt;http://www.skype.com&lt;/a&gt; e instale-o.&amp;nbsp;&lt;/li&gt;&lt;li&gt;Garantir que programas GTK rodados como root têm a mesma aparência que o resto do sistema. Isto é especialmente útil se você quiser instalar o synaptic: sudo ln -s $HOME/.gtkrc-2.0-kde4 /root/.gtkrc-2.0&lt;/li&gt;&lt;/ul&gt;Esta lista não é exaustiva, nem todos os seus passos servem para todo o mundo. Se alguém tiver dicas de outras coisas a serem feitas, comentários serão bem vindos! &lt;br /&gt;&lt;ul&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2909211050817756519-4841804797362272343?l=luisfpg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://luisfpg.blogspot.com/feeds/4841804797362272343/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2909211050817756519&amp;postID=4841804797362272343' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/4841804797362272343'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/4841804797362272343'/><link rel='alternate' type='text/html' href='http://luisfpg.blogspot.com/2010/04/dica-o-que-fazer-apos-instalar-o.html' title='Dica: O que fazer após instalar o Kubuntu Linux'/><author><name>Luis Fernando</name><uri>http://www.blogger.com/profile/10369964459649811472</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-6BL3zQMFi84/TofJ6WdnhFI/AAAAAAAAAK8/cfVeC0G43lQ/s220/avatar%2BLuis%2B2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2909211050817756519.post-7638159149907232054</id><published>2010-04-06T17:59:00.013-03:00</published><updated>2010-04-08T11:52:32.669-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='netbook'/><category scheme='http://www.blogger.com/atom/ns#' term='phn 10103'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>Netbook Philco PHN 10103 e o Linux</title><content type='html'>Estes dias comprei um netbook da Philco, modelo PHN 10103, que veio com o Mandriva Linux pré-instalado.&lt;br /&gt;Uma das primeiras coisas que fiz foi instalar o Kubuntu Lucid (ainda em beta) nele.&lt;br /&gt;Tive alguns problemas com o hardware, mas todos eles têm solução. Estas dicas funcionam para qualquer variante do Ubuntu Lucid (Kubuntu no meu caso, mas funciona para Ubuntu, Xubuntu, Lubuntu...). Se você usa outras distribuições, pode adaptar estas dicas para elas.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Webcam de cabeça para baixo:&lt;/b&gt;&lt;br /&gt;Para isto, deve-se instalar uma versão mais nova do pacote libv4l, mais o frontend para configurar:&lt;br /&gt;&lt;pre style="display: inline; margin-top: 0pt;"&gt;sudo add-apt-repository ppa:libv4l&lt;br /&gt;sudo apt-get update&lt;br /&gt;sudo apt-get install gtk-v4l libv4l-0&lt;/pre&gt;&lt;br /&gt;Depois, rode o gtk-v4l e ajuste as opções de espelho horizontal e vertical. Para o skype, tive usar um script. No meu caso, o arquivo está no $HOME/bin/run-skype, com o seguinte conteúdo:&lt;br /&gt;&lt;pre style="display: inline; margin-top: 0pt;"&gt;#!/bin/bash&lt;br /&gt;LD_PRELOAD=/usr/lib/libv4l/v4l1compat.so skype&lt;/pre&gt;&lt;br /&gt;Não esqueça de dar permissão de execução para esse arquivo, e alterar o lançador do menu para ele ao invés do comando padrão.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Teclas de atalho que não funcionam:&lt;/b&gt;&lt;br /&gt;Para esta dica, gostaria de agradecer grandemente ao Corentin Chary, que é o desenvolvedor do módulo do kernel que suporta o ACPI nos notebooks da Asus, e este netbook é um deles. O Corentin foi muito prestativo e respondeu prontamente às perguntas até chegarmos à solução.&lt;br /&gt;&lt;br /&gt;Deve-se adicionar parâmetros no arquivo /etc/default/grub (abrir com o sudo). Procure a linha GRUB_CMDLINE_LINUX_DEFAULT e adicione, dentro das aspas, o seguinte: (sem aspas) "acpi.power_nocheck=1". No meu caso, essa linha ficou assim:&lt;br /&gt;&lt;pre style="display: inline; margin-top: 0pt;"&gt;GRUB_CMDLINE_LINUX_DEFAULT="splash quiet acpi.power_nocheck=1"&lt;/pre&gt;&lt;br /&gt;Finalmente, rode no terminal: sudo update-grub e reinicie a máquina.&lt;br /&gt;&lt;br /&gt;A única função que não funcionou direto foi a de ligar / desligar o touchpad. Mas isso também tem solução! Vamos ao terminal:&lt;br /&gt;&lt;pre style="display: inline; margin-top: 0pt;"&gt;sudo apt-get install aosd-cat&lt;/pre&gt;&lt;br /&gt;Depois, deve-se modificar o arquivo executado quando o evento de touchpad é detectado. Para isso, rode o seguinte:&lt;br /&gt;&lt;pre style="display: inline; margin-top: 0pt;"&gt;cd /etc/acpi&lt;br /&gt;sudo mv asus-touchpad.sh asus-touchpad.sh.orig&lt;br /&gt;sudo nano asus-touchpad.sh&lt;/pre&gt;&lt;br /&gt;Então, cole o seguinte conteúdo:&lt;br /&gt;&lt;pre style="display: inline; margin-top: 0pt;"&gt;#!/bin/bash&lt;br /&gt;[ -f /usr/share/acpi-support/state-funcs ] || exit 0&lt;br /&gt;. /usr/share/acpi-support/power-funcs&lt;br /&gt;getXconsole&lt;br /&gt;DEVICE="AlpsPS/2 ALPS GlidePoint"&lt;br /&gt;PROPERTY="Device Enabled"&lt;br /&gt;QUERY=`xinput list-props "$DEVICE" | grep "$PROPERTY"`&lt;br /&gt;VALUE=${QUERY#*:}&lt;br /&gt;if [ $VALUE == "1" ]; then&lt;br /&gt;        xinput set-int-prop "AlpsPS/2 ALPS GlidePoint" "Device Enabled" 8 0;&lt;br /&gt;        echo "Touchpad desligado" | aosd_cat -p 7 -u 1000;&lt;br /&gt;else&lt;br /&gt;        xinput set-int-prop "AlpsPS/2 ALPS GlidePoint" "Device Enabled" 8 1;&lt;br /&gt;        echo "Touchpad ligado" | aosd_cat -p 7 -u 1000;&lt;br /&gt;fi&lt;br /&gt;exit 0&lt;/pre&gt;&lt;br /&gt;Depois, torne-o executável e adicione o serviço acpid para ser executado ao iniciar a máquina:&lt;br /&gt;&lt;pre style="display: inline; margin-top: 0pt;"&gt;sudo chmod +x asus-touchpad.sh&lt;br /&gt;sudo update-rc.d acpid defaults&lt;br /&gt;sudo start acpid&lt;/pre&gt;&lt;br /&gt;Repare que nesta última linha, o serviço acpid é iniciado. Assim, ao apertar Fn+F9, você verá uma mensagem na tela indicando o estado do touchpad.&lt;br /&gt;&lt;br /&gt;Assim, o netbook funcionou perfeitamente no Linux. Aliás, isso já era sabido, pois ele veio com o Linux instalado, mas precisou dessas intervenções manuais para funcionar tudo ok.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2909211050817756519-7638159149907232054?l=luisfpg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://luisfpg.blogspot.com/feeds/7638159149907232054/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2909211050817756519&amp;postID=7638159149907232054' title='18 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/7638159149907232054'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/7638159149907232054'/><link rel='alternate' type='text/html' href='http://luisfpg.blogspot.com/2010/04/netbook-philco-phn-10103-e-o-linux.html' title='Netbook Philco PHN 10103 e o Linux'/><author><name>Luis Fernando</name><uri>http://www.blogger.com/profile/10369964459649811472</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-6BL3zQMFi84/TofJ6WdnhFI/AAAAAAAAAK8/cfVeC0G43lQ/s220/avatar%2BLuis%2B2.jpg'/></author><thr:total>18</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2909211050817756519.post-4634264624508938555</id><published>2010-01-27T08:32:00.000-02:00</published><updated>2010-01-27T08:32:24.171-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='kubuntu'/><title type='text'>Fim do "distro-hopping"?</title><content type='html'>Talvez seja a paternidade, eu não sei.&lt;br /&gt;Mas cansei da brincadeira de ficar instalando uma nova distribuição do Linux a cada alguns dias / semanas...&lt;br /&gt;Neste último mês, em especial, já instalei:&amp;nbsp;openSUSE,&amp;nbsp;Kubuntu Lucid Alpha 2,&amp;nbsp;sidux e&amp;nbsp;Arch Linux.&lt;br /&gt;Pronto, cheguei no meu limite!&lt;br /&gt;Acho que agora me aquietei: Voltei pro Kubuntu Karmic (versão estável), nos 2 computadores (desktop e laptop). Tem seus problemas, mas todos têm. Só que acho que no Kubuntu, as vantagens superam em muito os problemas.&lt;br /&gt;E a próxima versão, o Lucid, vai ter... (ops!, será que já estou tentado a atualizar para a versão alpha? argh, vou esperar pelo menos a RC...)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2909211050817756519-4634264624508938555?l=luisfpg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://luisfpg.blogspot.com/feeds/4634264624508938555/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2909211050817756519&amp;postID=4634264624508938555' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/4634264624508938555'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/4634264624508938555'/><link rel='alternate' type='text/html' href='http://luisfpg.blogspot.com/2010/01/fim-do-distro-hopping.html' title='Fim do &quot;distro-hopping&quot;?'/><author><name>Luis Fernando</name><uri>http://www.blogger.com/profile/10369964459649811472</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-6BL3zQMFi84/TofJ6WdnhFI/AAAAAAAAAK8/cfVeC0G43lQ/s220/avatar%2BLuis%2B2.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2909211050817756519.post-3813870321148444074</id><published>2010-01-07T23:20:00.002-02:00</published><updated>2010-01-07T23:46:12.680-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='openSUSE'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='kde'/><title type='text'>Testando o openSUSE</title><content type='html'>Bem, minha já &lt;a href="http://luisfpg.blogspot.com/2009/03/nova-investida-arch-linux.html"&gt;longa lista&lt;/a&gt; de distribuições de Linux que testei agora tem mais um nome: openSUSE.&lt;div&gt;Na verdade eu já havia usado há bastante tempo o SuSE, mas é a primeira vez que uso o openSuSE.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Minhas motivações:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Estava usando há algum tempo o sidux. Gosto muito dele por ser baseado no Debian e ter as últimas versões de todos os programas (pode ter algum atraso, mas elas chegam!). Entretanto, ela não é para iniciantes, e gostaria de testar uma distribuição mais fácil de usar.&lt;/li&gt;&lt;li&gt;Uso o Kubuntu no trabalho, mas acho que ele decaiu muito faz algum tempo. Tomara que o Project Timelord, que tenta fortalecer a distro e ligar alguns pontos que estavam faltando, dê frutos, e o Lucid Linx (10.04) seja melhor que as anteriores. Apesar de ser mais fácil que o sidux, tem seus problemas (como todos, aliás)&lt;/li&gt;&lt;li&gt;Não gosto de esperar o tempo de vida inteiro da distribuição para poder atualizar aplicações como openoffice, gimp e firefox. O openSUSE tem o BuildService (parecido com o PPA do ubuntu, mas mais integrado), inclusive alguns "semi-oficiais" para suportar versões mais novas de aplicações na versão atual.&lt;/li&gt;&lt;li&gt;Quando vi que tinham programado uma integração do Firefox para o KDE, fiquei impressionado. Estou há anos buscando isso. Consegui instalar essa versão no Kubuntu (tem um PPA do deb-fx) no trabalho, mas nem sinal disso no sidux (que, como o Debian, nem tem firefox, tem iceweasel!).&lt;/li&gt;&lt;li&gt;Li vários posts dizendo que o openSUSE é a melhor distro no que se refere ao KDE. Inclusive alguns dos principais desenvolvedores do KDE são funcionários da Novell e trabalham no openSUSE.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;Instalação:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Resolvi instalar apenas no notebook. Meu desktop segue com o sidux.&lt;/li&gt;&lt;li&gt;Baixei a versão em DVD de 32 bits :-o. Logo eu que sempre advoguei o Linux em 64 bits... Verdade, mas pretendo, caso resolva continuar com o openSUSE, baixar a versão 64 bits. Aliás, nesse caso, vou baixar o net install, que baixa todos os pacotes da rede na hora da instalação.&lt;/li&gt;&lt;li&gt;A instalação foi fácil, o instalador é uma barbada de usar. E até foi rápido pra instalar. Muito mais rápido que baixar os 4,2GB do DVD e gravar o dito cujo na mídia :-)&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Minhas impressões:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Acostumado com o Kubuntu (que fora o bootsplash não tem nenhuma identidade visual) e com o sidux (que tem um tema preto e vermelho que é até meio macabro...), achei o visual do openSUSE um artigo de luxo. O menu do grub, o bootsplash, o tema do KDM, do ksplash e da área de trabalho... Tudo se integra em uma identidade visual verde escuro muito bem feita. Parabéns à equipe de arte do openSUSE. Até o a tela de apresentação (splash screen) de algumas aplicações (como o Gimp e o OpenOffice) são customizadas para a identidade visual do openSUSE.&lt;/li&gt;&lt;li&gt;O Yast, que é uma aplicação de gerenciamento do computador é muito útil e bem integrada com o KDE. Com ele é possível gerenciar os softwares instalados, configurar usuários, segurança, firewall, compartilhamentos... Certamente uma ferramenta assim falta para a família *buntu.&lt;/li&gt;&lt;li&gt;A integração do Firefox com o KDE é realmente aquilo que eu havia lido... É muito chato ficar usando hacks como &lt;a href="http://luisfpg.blogspot.com/2009/04/making-firefox-open-files-honoring-kdes.html"&gt;este&lt;/a&gt; ou &lt;a href="http://luisfpg.blogspot.com/2009/07/making-firefox-using-kdes-open-file.html"&gt;este&lt;/a&gt; para o Firefox parecer saber que o KDE existe...&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Enfim, recomendo o openSUSE para quem estiver interessado no Linux e no KDE. Bem melhor que o Kubuntu na minha opinião. E mais fácil de usar que o sidux ou o Arch...&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/2909211050817756519-3813870321148444074?l=luisfpg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://luisfpg.blogspot.com/feeds/3813870321148444074/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2909211050817756519&amp;postID=3813870321148444074' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/3813870321148444074'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/3813870321148444074'/><link rel='alternate' type='text/html' href='http://luisfpg.blogspot.com/2010/01/testando-o-opensuse.html' title='Testando o openSUSE'/><author><name>Luis Fernando</name><uri>http://www.blogger.com/profile/10369964459649811472</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-6BL3zQMFi84/TofJ6WdnhFI/AAAAAAAAAK8/cfVeC0G43lQ/s220/avatar%2BLuis%2B2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2909211050817756519.post-964437978922739183</id><published>2009-12-22T22:36:00.009-02:00</published><updated>2010-04-08T13:11:17.121-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='banco do brasil'/><category scheme='http://www.blogger.com/atom/ns#' term='64 bits'/><title type='text'>Sistemas do Banco do Brasil e Linux 64 bits</title><content type='html'>[EDIT] Conforme comentário do Rubens de Souza Matos Jr., realmente, o Home Banking do Banco do Brasil agora suporta o Linux em 64 bits! Isso é uma excelente notícia para a maioria dos usuários. Mas, como nem tudo é perfeito, para mim e para os outros clientes que também possuem uma conta empresarial, as dicas deste post seguem valendo, pois o Gerenciador Financeiro (aplicativo para contas empresariais) ainda não suporta 64 bits... Mas é um sinal de progresso, e espero que logo ele também rode "out-of-the-box"!&lt;br /&gt;&lt;br /&gt;Já há algum tempo venho insistindo com o Banco do Brasil a necessidade de seus sistemas (home banking e gerenciador financeiro) suportarem o Linux 64 bits.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Como funciona:&lt;/span&gt; O site usa o plugin do Java (disponível para a maioria dos sistemas operacionais) como segurança adicional de acesso (recentemente foi trocado o teclado virtual para um campo normal onde se digita a senha pelo teclado do computador mesmo). O problema não está no Java, mas na solução empregada pelo banco: para identificar o computador, é rodado um programa nativo (que não é Java) para obter informações da máquina que o próprio Java não disponibiliza. Assim, ao acessar o banco, é baixado um arquivo jar (Java ARchive) que contém além do programa Java, esses pequenos programas nativos para cada arquitetura: Windows / Linux / Mac...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;O problema:&lt;/span&gt; No jar do banco não existe um arquivo para o Linux em 64 bits, somente 32. Não sei se ele funciona no Windows 64 bits. Alguém tem essa informação? O que sei é que no Windows é instalado um programa adicional para suportar essa solução. Talvez esse programa seja o responsável pela identificação do computador.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Por quê Linux 64 bits é importante mesmo?&lt;/span&gt; Já fazem mais de 10 anos que as arquiteturas 64 bits estão no mercado. Nenhum sistema operacional de 32 bits consegue usar mais do que 4 GB de memória. Alguns até conseguem com uma gambiarra chamada PAE, mas ficam mais lentos. Além disso, muitos programas rodam mais rápido em 64 bits.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Por quê o Banco do Brasil deveria suportar o Linux 64 bits?&lt;/span&gt; Na verdade, é uma questão de mercado: o banco deveria suportar os sistemas que seus clientes usam. Qualquer um que buscar no google por banco do brasil linux 64 bits vai ver uma série de páginas e blogs (como este) de usuários insatisfeitos. E há outra questão: o Linux está em crescimento, e está aqui para ficar. E praticamente 100% dos computadores novos suportam 64 bits (exceto os netbooks, ou mini notebooks). Então, pra que sub-utilizar um computador porque os programadores do banco simplesmente "esqueceram" de colocar um arquivo dentro daquele tal de pacote jar?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;E a solução por parte do banco é difícil?&lt;/span&gt; Como o sistema de segurança do banco não é software livre, fica impossível dizer o trabalho exato que seria necessário para suportar o Linux 64 bits. Mas o mais provável é que o exato programa que roda em 32 bits possa ser compilado em 64. Depois disso, seria só recriar o pacote jar e pronto.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Tá, mas eu preciso usar o sistema e tenho um Linux 64 bits. Como faço?&lt;/span&gt; Baixe o firefox de &lt;a href="http://www.firefox.com/"&gt;http://www.firefox.com&lt;/a&gt; (que é 32 bits) e extraia ele em algum lugar (por exemplo, /home/usuario - adaptando para o seu usuario). A pasta firefox será criada. Então abra um terminal (sim, um terminal) e digite:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;cd firefox&lt;br /&gt;./firefox -ProfileManager&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Crie um perfil com o nome 32, e desmarque a opção para usar sempre esse perfil.&lt;br /&gt;O firefox irá abrir. Você pode fechá-lo por agora.&lt;br /&gt;Depois instale o Java 32 bits. Baixe a versão Linux (arquivo de extração automática) em &lt;a href="http://www.java.com/"&gt;http://www.java.com&lt;/a&gt;.&lt;br /&gt;Volte ao terminal. Os passos se baseiam na versão do java no momento do post, que é 6u17. Adapte de acordo com a versão baixada:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;cd firefox/plugins&lt;br /&gt;sh caminho_do_download/jre-6u17-linux-i586.bin&lt;br /&gt;Aperte a barra de espaço até chegar ao fim do texto, digite y e enter. &lt;br /&gt;ln -s jre1.6.0_17/plugin/i386/ns7/libjavaplugin_oji.so&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Aí você vai ter que criar um lançador do Firefox 32 bits. Clique com o botão direito no menu do sistema (menu K ou ícone do Ubuntu ou Gnome) e clique em editar menus. Adicione um ítem na seção Internet, colocando Firefox 32 como nome, "/home/usuario/firefox/firefox -P 32 -no-remote" (sem aspas, adaptando o usuario e nome do perfil criado - 32). Como ícone, você pode usar /home/usuario/apps/firefox/chrome/icons/default/default48.png. Salve o lançador.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;[EDIT]&lt;/b&gt;&amp;nbsp; Por algum motivo desconhecido, para acessar minha conta empresarial, o firefox trancava, comendo 100% da CPU. Tive que iniciar em modo de segurança (parâmetro -safe-mode) e desativar todos os complementos. Aí, reiniciei ele e ativei o plugin do java. Aí a coisa voltou a funcionar...&lt;br /&gt;&lt;br /&gt;&lt;b&gt;[EDIT 2]&lt;/b&gt; Conforme comentário aqui no post, no Firefox 3.6 a coisa não funciona. Tem que ser o 3.5 mesmo.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;E por que eu tenho que fazer tudo isso se é interesse do banco em ter-me como cliente?&lt;/span&gt; Não sei, mas obviamente a responsabilidade é do banco em querer ter você como cliente. Tenho certeza que quanto mais usuários criarem uma reclamação (por dentro do home banking, em mensagens), mais rápido este problema será solucionado.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2909211050817756519-964437978922739183?l=luisfpg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://luisfpg.blogspot.com/feeds/964437978922739183/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2909211050817756519&amp;postID=964437978922739183' title='7 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/964437978922739183'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/964437978922739183'/><link rel='alternate' type='text/html' href='http://luisfpg.blogspot.com/2009/12/sistemas-do-banco-do-brasil-e-linux-64.html' title='Sistemas do Banco do Brasil e Linux 64 bits'/><author><name>Luis Fernando</name><uri>http://www.blogger.com/profile/10369964459649811472</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-6BL3zQMFi84/TofJ6WdnhFI/AAAAAAAAAK8/cfVeC0G43lQ/s220/avatar%2BLuis%2B2.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2909211050817756519.post-8336179344738327241</id><published>2009-11-02T21:17:00.004-02:00</published><updated>2009-11-02T21:34:53.676-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jogos'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='world of goo'/><title type='text'>World of Goo</title><content type='html'>Para quem gosta de jogos de computador e usa Linux, sabe da triste realidade:&lt;br /&gt;São realmente poucas as empresas que fazem jogos para este sistema operacional, pois ele ainda tem muito poucos usuários (algo em torno de 1 a 2%).&lt;br /&gt;Claro que toda a regra tem suas exceções. Um exemplo é o &lt;a href="http://www.worldofgoo.com/"&gt;World of Goo&lt;/a&gt;, que foi lançado simultaneamente em várias plataformas (incluindo Linux).&lt;br /&gt;Já havia baixado o demo, e havia gostado muito. E ele é simplesmente o melhor jogo de lógica que já joguei... Tudo é extremamente bem feito, muito divertido e desafiador. Recomendo. &lt;br /&gt;E para aqueles que querem um dia ver mais e mais bons jogos para Linux: suportem quem nos suporta. O preço é bem razoável (US$ 20,00, que quando comprei equivalia a +- R$ 35,00).&lt;br /&gt;Espero que no futuro teremos jogos de grandes empresas para Linux também... &lt;br /&gt;De qualquer forma, essas empresas já programam a maioria dos jogos como multiplataforma (Windows, MacOS, Wii, XBox, PS...). Incluir o Linux nessa lista é só uma questão de tempo, com certeza...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2909211050817756519-8336179344738327241?l=luisfpg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://luisfpg.blogspot.com/feeds/8336179344738327241/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2909211050817756519&amp;postID=8336179344738327241' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/8336179344738327241'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/8336179344738327241'/><link rel='alternate' type='text/html' href='http://luisfpg.blogspot.com/2009/11/world-of-goo.html' title='World of Goo'/><author><name>Luis Fernando</name><uri>http://www.blogger.com/profile/10369964459649811472</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-6BL3zQMFi84/TofJ6WdnhFI/AAAAAAAAAK8/cfVeC0G43lQ/s220/avatar%2BLuis%2B2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2909211050817756519.post-1869343881193292055</id><published>2009-08-17T21:58:00.002-03:00</published><updated>2009-08-17T22:12:27.128-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sidux'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>sidux</title><content type='html'>Mais um capítulo na minha novela pessoal de distribuições do Linux. Já contei um pouco da minhas andanças entre as distribuições &lt;a href="http://luisfpg.blogspot.com/2009/03/nova-investida-arch-linux.html"&gt;aqui&lt;/a&gt; e &lt;a href="http://luisfpg.blogspot.com/2009/04/de-volta-ao-kubuntu-linux.html"&gt;aqui&lt;/a&gt;.&lt;br&gt;&lt;br /&gt;E a história continua. Resolvi há alguns dias testar o &lt;a href="http://sidux.com/"&gt;sidux&lt;/a&gt;. O motivo principal é o mesmo que me levou a testar o Arch: Não existem versões "fechadas", mas ao atualizar o sistema, as últimas versões dos pacotes são instalados.&lt;br&gt;&lt;br /&gt;Isso porque ele é baseado no &lt;a href="http://www.debian.org/releases/unstable/"&gt;Debian sid&lt;/a&gt;, que é a versão instável do Debian (que é a base do Ubuntu). O que o sidux faz é adicionar alguns pacotes (inclusive do kernel) para estabilizar um pouco o sid.&lt;br&gt;&lt;br /&gt;O resultado é um sistema sempre atualizado (ou quase sempre), com pouco trabalho e sem precisar reinstalar todo o sistema operacional a cada 6 meses. E o melhor: usando o apt-get / synaptic!!!&lt;br&gt;&lt;br /&gt;Por que não usar o Debian sid direto? Bem, ele é a torta. O sidux é apenas a cereja no topo. Eu recomendo!!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2909211050817756519-1869343881193292055?l=luisfpg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://luisfpg.blogspot.com/feeds/1869343881193292055/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2909211050817756519&amp;postID=1869343881193292055' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/1869343881193292055'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/1869343881193292055'/><link rel='alternate' type='text/html' href='http://luisfpg.blogspot.com/2009/08/sidux.html' title='sidux'/><author><name>Luis Fernando</name><uri>http://www.blogger.com/profile/10369964459649811472</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-6BL3zQMFi84/TofJ6WdnhFI/AAAAAAAAAK8/cfVeC0G43lQ/s220/avatar%2BLuis%2B2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2909211050817756519.post-9099939400057050242</id><published>2009-07-31T22:47:00.009-03:00</published><updated>2010-01-07T23:46:29.644-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><category scheme='http://www.blogger.com/atom/ns#' term='dialogs'/><category scheme='http://www.blogger.com/atom/ns#' term='kgtk'/><category scheme='http://www.blogger.com/atom/ns#' term='kubuntu'/><title type='text'>Making firefox use KDE's open file dialog in Kubuntu</title><content type='html'>Everyone who uses KDE knows the standard GTK file picker dialog JUST SUCKS!!!&lt;br /&gt;Mozilla seems to refuse to provide a decent KDE integration in Firefox, so, at least, there are some good souls who created &lt;a href="http://www.kde-apps.org/content/show.php?content=36077"&gt;kgtk&lt;/a&gt; and others who &lt;a href="https://launchpad.net/~kgtk/+archive/ppa"&gt;packaged&lt;/a&gt; it for kubuntu.&lt;br /&gt;&lt;br /&gt;To install it, open a terminal and execute the following:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Add the repository source, running kdesudo kate /etc/apt/sources.list and paste the following in the end of the file:&lt;br /&gt;&lt;br /&gt;deb http://ppa.launchpad.net/kgtk/ppa/ubuntu jaunty main&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Add the repository keys: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 9F8C7211&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Update the packages: sudo apt-get update&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Install the desired package: sudo apt-get install kubuntu-kgtk&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Restart firefox&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Be happy!&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;[Edit]&lt;br /&gt;The kubuntu-kgtk package installs configurations for several other applications than firefox, like Gimp, Kino, etc. I've seen a glitch with GIMP where after selecting a file to save, the dialog for the specific format parameters (like jpeg, gif or png) do not have focus when appear, so you'll have to find it in the taskbar.&lt;br /&gt;&lt;br /&gt;Another thing to watch is that only the .desktop laucher files are modified. So, if you have firefox in the favorites, you'll have to remove it and add again, since the favorite (or panel launcher) is a copy, not a link of the original launcher.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2909211050817756519-9099939400057050242?l=luisfpg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://luisfpg.blogspot.com/feeds/9099939400057050242/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2909211050817756519&amp;postID=9099939400057050242' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/9099939400057050242'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/9099939400057050242'/><link rel='alternate' type='text/html' href='http://luisfpg.blogspot.com/2009/07/making-firefox-using-kdes-open-file.html' title='Making firefox use KDE&apos;s open file dialog in Kubuntu'/><author><name>Luis Fernando</name><uri>http://www.blogger.com/profile/10369964459649811472</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-6BL3zQMFi84/TofJ6WdnhFI/AAAAAAAAAK8/cfVeC0G43lQ/s220/avatar%2BLuis%2B2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2909211050817756519.post-4702106245410528449</id><published>2009-04-25T01:20:00.007-03:00</published><updated>2009-04-25T15:39:01.255-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><category scheme='http://www.blogger.com/atom/ns#' term='kde'/><title type='text'>Making firefox open files honoring KDE's file associations</title><content type='html'>A very frustrating issue for KDE users with firefox are the file associations. And manually setting the program for each file type is just too tedious.&lt;br /&gt;&lt;br /&gt;What we have to do is provide a $HOME/.mailcap file which associates all file types with the xdg-open script, which will honor the file associations set in KDE (and other DE's too). Firefox uses that file to read the associations. If you want this to be system-wide (all users), copy it over /etc/mailcap (as root - backup is always a good idea) .&lt;br /&gt;&lt;br /&gt;The easier way is to run the following command:&lt;br /&gt;&lt;span style="font-style: italic;"&gt;wget http://luisfpg.uuuq.com/blog/mailcap -O ~/.mailcap&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This script was generated with &lt;a href="http://luisfpg.uuuq.com/blog/update-user-mailcap"&gt;&lt;span style="text-decoration: underline;"&gt;update-user-mailcap&lt;/span&gt;&lt;/a&gt;, a ruby script that reads /etc/mime.types and generates the $HOME/.mailcap file. To run it, execute the following commands:&lt;br /&gt;&lt;span style="font-style: italic;"&gt;wget http://luisfpg.uuuq.com/blog/update-user-mailcap&lt;br /&gt;chmod +x&lt;/span&gt; &lt;span style="font-style: italic;"&gt;update-user-mailcap&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;.&lt;/span&gt;&lt;span style="font-style: italic;"&gt;/update-user-mailcap&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If you don't trust me, examine the file first. It's always a good idea to do this when downloading scripts from the Internet, by the way.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Attention:&lt;/span&gt;&lt;br /&gt;If you had previously customized some file associations in firefox, you might want to rename the $HOME/.mozilla/firefox/profile/mimeTypes.rdf to other name (or just remove it) and restart firefox to have the associations reset.&lt;br /&gt;&lt;br /&gt;A (minor) drawback is that on the file download dialog, you will always see xdg-open as the program, and not the real program which will be used to open the file, but it will work. Trust me ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2909211050817756519-4702106245410528449?l=luisfpg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://luisfpg.blogspot.com/feeds/4702106245410528449/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2909211050817756519&amp;postID=4702106245410528449' title='9 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/4702106245410528449'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/4702106245410528449'/><link rel='alternate' type='text/html' href='http://luisfpg.blogspot.com/2009/04/making-firefox-open-files-honoring-kdes.html' title='Making firefox open files honoring KDE&apos;s file associations'/><author><name>Luis Fernando</name><uri>http://www.blogger.com/profile/10369964459649811472</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-6BL3zQMFi84/TofJ6WdnhFI/AAAAAAAAAK8/cfVeC0G43lQ/s220/avatar%2BLuis%2B2.jpg'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2909211050817756519.post-2255616635658985542</id><published>2009-04-22T20:03:00.003-03:00</published><updated>2009-04-22T20:29:48.261-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='arch linux'/><category scheme='http://www.blogger.com/atom/ns#' term='kde'/><category scheme='http://www.blogger.com/atom/ns#' term='kubuntu'/><title type='text'>De volta ao Kubuntu Linux</title><content type='html'>Bem, depois de algum tempo com o Arch Linux, voltei a instalar o Kubuntu...&lt;br /&gt;Minhas conclusões sobre o Arch:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;É uma excelente distribuição, principalmente pelo fato de não haver "versões" - os programas são sempre atualizados e basta rodar o lendário &lt;span style="font-style: italic;"&gt;pacman -Syu&lt;/span&gt; para obter o "the latest and the greatest";&lt;/li&gt;&lt;li&gt;Como dito no site do Arch mesmo, ele não tenta "esconder" a complexidade do sistema. Muita coisa vem funcionando de fábrica, mas muita tem de ser configurada à mão.&lt;/li&gt;&lt;/ul&gt;Agora os pontos negativos:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Precisava rodar o GWT, que é 32 bits (e meu sistema, 64). Tive até que fazer uma gambiarra do tipo: renomeei o executável do java 32 e criei o script java que setava várias variáves de ambiente e chamava o executável renomeado;&lt;/li&gt;&lt;li&gt;Fazer o modem 3G da vivo funcionar foi impossível. Ainda bem que eu tinha outro notebook com um windinho e compartilhei a conexão 3G.&lt;/li&gt;&lt;/ul&gt;Assim, resolvi voltar ao Kubuntu. 2 dias antes do release final não consegui esperar e baixei o RC assim mesmo ;).&lt;br /&gt;Minhas impressões:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;O sistema boota muito rápido. Leva 20,5 segundos cronometrados desde o GRUB até a tela de login do KDM;&lt;/li&gt;&lt;li&gt;O QT 4.5 deixa o sistema bem mais rápido;&lt;/li&gt;&lt;li&gt;Ele vem com o estilo QtCurve para aplicações GTK pré configurado. Eu havia escrito sobre como fazer isso &lt;a href="http://luisfpg.blogspot.com/2009/03/aparencia-de-aplicacoes-gtk-no-kde-4.html"&gt;neste post&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Gostei do widget do NetworkManager, apesar de um bug que faz com que não haja espaço para todas as redes wireless aparecerem ao clicar nele.&lt;/li&gt;&lt;/ul&gt;Mas, como nem tudo são rosas, não gostei do KPackageKit. Acho que ele está muito cru ainda. Principalmente por não mostrar os diálogos dos pacotes debian. Tente, por exemplo, instalar o java da sun (agora da oracle) e vai dar erro, porque a licença não foi aceita, porque o KPackageKit não sabe como perguntar se você aceita a licença... Por isso, instalei o bom e velho synaptic, que é o melhor front-end para o apt, com certeza.&lt;br /&gt;&lt;br /&gt;Só uma dica: para que o synaptic tenha a mesma aparência das aplicações GTK rodadas com seu usuário comum, rode: &lt;span style="font-style: italic;"&gt;sudo ln -s $HOME/.gtkrc-2.0-kde4 /root/.gtkrc-2.0&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Bem, minha impressão foi muito boa. Parabéns, equipe do Kubuntu (e da base do Ubuntu, claro). Eu realmente achei uma pena que o Ubuntu tenha escolhido o Gnome como ambiente primário. Sem querer iniciar uma "flamewar", o KDE é muito bala!!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2909211050817756519-2255616635658985542?l=luisfpg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://luisfpg.blogspot.com/feeds/2255616635658985542/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2909211050817756519&amp;postID=2255616635658985542' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/2255616635658985542'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/2255616635658985542'/><link rel='alternate' type='text/html' href='http://luisfpg.blogspot.com/2009/04/de-volta-ao-kubuntu-linux.html' title='De volta ao Kubuntu Linux'/><author><name>Luis Fernando</name><uri>http://www.blogger.com/profile/10369964459649811472</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-6BL3zQMFi84/TofJ6WdnhFI/AAAAAAAAAK8/cfVeC0G43lQ/s220/avatar%2BLuis%2B2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2909211050817756519.post-1237878655247560415</id><published>2009-03-23T20:13:00.002-03:00</published><updated>2009-03-23T20:20:19.152-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gtk'/><category scheme='http://www.blogger.com/atom/ns#' term='qt'/><category scheme='http://www.blogger.com/atom/ns#' term='estilos'/><title type='text'>Aparência de aplicações GTK no KDE 4</title><content type='html'>&lt;p&gt;Muitos sabem que a aparência nativa de aplicações GTK (como Firefox, Thunderbird, Eclipse...) no ambiente KDE, por padrão, é horrível.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Alguns sabem, existe um estilo para aplicações GTK integrado às configurações do KDE (fica no ítem Aparência / GTK Styles and Fonts). Quem não tem ele instalado, pode procurar pelo pacote gtk-qt-engine). Só que, ao selecionar "usar o meu estilo do KDE em aplicações GTK", os widgets (botões, caixas de texto, botões de rádio e caixas de seleção) dentro do firefox, por exemplo, continuam horríveis. Ficam com um fundo cinza e ocupam bem mais espaço que o necessário.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Poucos sabem que isso tem solução! Basta selecionar um estilo GTK nativo ao invés da opção "usar o meu estilo do KDE em aplicações GTK". Um exemplo é baixar o estilo QTCurve, que tem sua versão tanto GTK quanto KDE. Assim, todas as aplicações ficam com um estilo "praticamente igual", e os widgets ficam certinhos!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2909211050817756519-1237878655247560415?l=luisfpg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://luisfpg.blogspot.com/feeds/1237878655247560415/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2909211050817756519&amp;postID=1237878655247560415' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/1237878655247560415'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/1237878655247560415'/><link rel='alternate' type='text/html' href='http://luisfpg.blogspot.com/2009/03/aparencia-de-aplicacoes-gtk-no-kde-4.html' title='Aparência de aplicações GTK no KDE 4'/><author><name>Luis Fernando</name><uri>http://www.blogger.com/profile/10369964459649811472</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-6BL3zQMFi84/TofJ6WdnhFI/AAAAAAAAAK8/cfVeC0G43lQ/s220/avatar%2BLuis%2B2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2909211050817756519.post-1243078291491123410</id><published>2009-03-22T09:21:00.003-03:00</published><updated>2009-03-22T10:42:09.572-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='arch linux'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='kubuntu'/><title type='text'>Nova investida: Arch Linux</title><content type='html'>&lt;p&gt;Parece a sina de muitos dos que curtem Linux: testar um monte de distribuições...&lt;br&gt;&lt;br /&gt;Minha história com o Linux foi mais ou menos:&lt;ul&gt;&lt;br /&gt;&lt;li&gt;2001: SuSe&lt;/li&gt;&lt;br /&gt;&lt;li&gt;2002: Slackware&lt;/li&gt;&lt;br /&gt;&lt;li&gt;2003: SuSe&lt;/li&gt;&lt;br /&gt;&lt;li&gt;2004 - 2005: Slackware&lt;/li&gt;&lt;br /&gt;&lt;li&gt;2005: Ubuntu / Kubuntu&lt;/li&gt;&lt;br /&gt;&lt;li&gt;2006 - 2007: Kubuntu&lt;/li&gt;&lt;br /&gt;&lt;li&gt;2007 - 2008: Mandriva&lt;/li&gt;&lt;br /&gt;&lt;li&gt;2008 - 2009: Kubuntu&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Só que agora resolvi mudar de novo, e depois de ter lido bastante, resolvi testar o Arch Linux. Por quê? Um motivo principal: com ele não precisa esperar 6 meses pra instalar a nova versão do aplicativo X, junto com o sistema todo. Claro, existem repositórios alternativos, PPAs e tal, mas eu sempre acabava reinstalando o sistema todo a cada 6 meses. E como tenho um desktop e um laptop, são 2 micros. E nem contei o do trabalho ainda ;).&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Entretanto, teria um problema: a instalação não é tão simples como a do (k)ubuntu ou do mandriva: é modo texto, cheia de opções e tal... Mas não tenho medo de coisas como "modo texto" ou "linha de comando". Portanto, resolvi encarar...&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Minha idéia não é um fazer um tutorial de como instalar o Arch Linux (tem vários na Internet), mas relatar minha experiência... Bem, apesar da instalação ser textual, é bastante fácil. Depois de instalar o sistema, instalei o xorg, o kde e os drivers da NVIDIA. Depois de uma mexida no xorg.conf (aliás, deve-se baixar o pacote hwd, e rodar hwd -xa para gerar o arquivo) para ativar resoluções maiores, maior nível de cor (vinha com 16 e não 24 bits), colocar o driver da nvidia e habilitar o Composite, tudo funcionou beleza...&lt;br /&gt;Instalei também o shaman, que é uma interface gráfica para o pacman (gerenciador de pacotes). Gostei bastante dele.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Depois disso, aplicações como o gimp e o firefox são indispensáveis. Mas como elas são GTK (o KDE roda nativamente em outro toolkit, o QT), o firefox, por exemplo, fica horrível. Parece saído diretamente dos anos 70. Instalando o pacote gtk-qt-engine e indo nas configurações de aparência do KDE, e definindo para usar para o GTK o estilo do QT, as coisas ficam beeem melhores. Aliás, o firefox fica bom mesmo com o tema KDE4 + Firefox3.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Como resultado, tenho agora um sistema que inicializa muito mais rápido e roda muito mais rápido que o Kubuntu. Na verdade, não sei se a diferença maior no KDE é pelo QT 4.5 ou pelo Arch, mas no Kubuntu Intrepid usava-se o QT 4.4, e já li que tem uma diferença de performance notável... Resumindo: valeu a pena!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2909211050817756519-1243078291491123410?l=luisfpg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://luisfpg.blogspot.com/feeds/1243078291491123410/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2909211050817756519&amp;postID=1243078291491123410' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/1243078291491123410'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/1243078291491123410'/><link rel='alternate' type='text/html' href='http://luisfpg.blogspot.com/2009/03/nova-investida-arch-linux.html' title='Nova investida: Arch Linux'/><author><name>Luis Fernando</name><uri>http://www.blogger.com/profile/10369964459649811472</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-6BL3zQMFi84/TofJ6WdnhFI/AAAAAAAAAK8/cfVeC0G43lQ/s220/avatar%2BLuis%2B2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2909211050817756519.post-3604416871166588740</id><published>2009-02-11T19:34:00.006-02:00</published><updated>2009-02-15T20:46:17.482-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='kde'/><category scheme='http://www.blogger.com/atom/ns#' term='intrepid'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>KDE 4.2 totalmente em português do Brasil no Kubuntu Intrepid</title><content type='html'>Quem usa o Kubuntu 8.10 (Intrepid Ibex) e ainda não instalou o KDE 4.2, faça-o. O site do Kubuntu tem &lt;a href="http://www.kubuntu.org/news/kde-4.2"&gt;instruções de como fazê-lo&lt;/a&gt;. Está beeem melhor que o KDE 4.1.&lt;br&gt;&lt;br /&gt;Mas, quem já o instalou deve ter notado que várias mensagens não estão traduzidas para o português do Brasil, pelo menos com o método de instalação descrito acima.&lt;br&gt;&lt;br /&gt;Bem, nem tudo está perdido. Felizmente, o pessoal do Fedora foi um pouco mais cuidadoso e publicou um &lt;a href="http://rpm.pbone.net/index.php3/stat/4/idpl/11706931/com/kde-l10n-Brazil-4.2.0-2.fc11.noarch.rpm.html"&gt;pacote&lt;/a&gt; com as traduções. Bem, eu o baixei, extraí os arquivos e fiz upload dele. &lt;a href="http://www.esnips.com/doc/ac05bc19-2082-4f94-97e0-96819d71f8bb/kde_4.2_ptbr.tar"&gt;Baixe-o aqui&lt;/a&gt;. Depois, abra um terminal e execute:&lt;br&gt;&lt;br /&gt;&lt;i&gt;tar xvzf kde_4.2_ptbr.tar.gz&lt;br&gt;&lt;br /&gt;sudo cp -r usr /&lt;br&gt;&lt;br /&gt;&lt;/i&gt;&lt;br&gt;&lt;br /&gt;Você pode excluir o diretório usr que foi criado no diretório corrente.&lt;br&gt;&lt;br /&gt;Pronto! Basta sair do KDE e iniciá-lo novamente (ou apertar Ctrl+Shift+BackSpace, mas cuidado, o ambiente gráfico será reiniciado e se tiver algum documento aberto... kabum).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2909211050817756519-3604416871166588740?l=luisfpg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://luisfpg.blogspot.com/feeds/3604416871166588740/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2909211050817756519&amp;postID=3604416871166588740' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/3604416871166588740'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/3604416871166588740'/><link rel='alternate' type='text/html' href='http://luisfpg.blogspot.com/2009/02/kde-42-totalmente-em-portugues-no.html' title='KDE 4.2 totalmente em português do Brasil no Kubuntu Intrepid'/><author><name>Luis Fernando</name><uri>http://www.blogger.com/profile/10369964459649811472</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-6BL3zQMFi84/TofJ6WdnhFI/AAAAAAAAAK8/cfVeC0G43lQ/s220/avatar%2BLuis%2B2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2909211050817756519.post-4018020639164430093</id><published>2009-02-04T15:57:00.007-02:00</published><updated>2009-02-12T09:18:07.344-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tradução'/><category scheme='http://www.blogger.com/atom/ns#' term='skype'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>Skype no Linux com tradução decente para o português do Brasil</title><content type='html'>Quem usa o Skype no Linux (versão 2.0.X) em português do Brasil já deve ter tomado um susto com a qualidade da tradução. Desde botões "AceiteAceite" e "RecuseRecuse" (duplicado mesmo) ou alguns textos em inglês ou italiano (?!?).&lt;br&gt;&lt;br /&gt;Para solucionar: baixe os dois arquivos: &lt;a href="http://www.esnips.com/doc/30d36cde-fe08-4d70-bdd0-3b9323363d38/skype_pt_br"&gt;skype_pt_br.qm&lt;/a&gt; e &lt;a href="http://www.esnips.com/doc/98049abc-958c-43d3-bc09-4418aedcdc73/skype_pt_br"&gt;&lt;br /&gt;skype_pt_br.ts&lt;/a&gt; para algum diretório. Depois, a partir desse diretório, execute:&lt;br&gt;&lt;i&gt;sudo cp skype_pt_br* /usr/share/skype/lang&lt;/i&gt;&lt;br&gt;&lt;br /&gt;Reinicie o Skype e pronto!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2909211050817756519-4018020639164430093?l=luisfpg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://luisfpg.blogspot.com/feeds/4018020639164430093/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2909211050817756519&amp;postID=4018020639164430093' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/4018020639164430093'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/4018020639164430093'/><link rel='alternate' type='text/html' href='http://luisfpg.blogspot.com/2009/02/skype-no-linux-com-traducao-decente.html' title='Skype no Linux com tradução decente para o português do Brasil'/><author><name>Luis Fernando</name><uri>http://www.blogger.com/profile/10369964459649811472</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-6BL3zQMFi84/TofJ6WdnhFI/AAAAAAAAAK8/cfVeC0G43lQ/s220/avatar%2BLuis%2B2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2909211050817756519.post-9164684453488886256</id><published>2009-01-17T21:23:00.005-02:00</published><updated>2009-01-19T12:04:38.386-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='intrepid'/><category scheme='http://www.blogger.com/atom/ns#' term='nvidia'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Instalando o driver NVIDIA 180.22 no Ubuntu 8.10 (Intrepid Ibex)</title><content type='html'>O Intrepid vêm com o driver NVIDIA 177.XX, que, como eu havia &lt;a href="http://luisfpg.blogspot.com/2008/11/driver-nvidia-e-kde-41.html"&gt;postado antes&lt;/a&gt;, não é muito interessante pra quem usa o KDE 4.1. Nesse mesmo post, estão as instruções para instalar o driver 180.06.&lt;br /&gt;Agora, a versão final da série 180 foi lançada, e é a 180.22.&lt;br /&gt;Como este driver não está disponível como pacote para o intrepid (já está disponível para os alphas do jaunty), ele pode ser instalado manualmente.&lt;br /&gt;Mas eu tive um problema ao instalá-lo: o servidor X (modo gráfico) não subia mais.&lt;br /&gt;Então vi que o problema era uma incompatibilidade entre a versão do driver que vem instalado no intrepid e a nova versão.&lt;br /&gt;Mas isso pode ser contornado! :)&lt;br /&gt;Primeiro uma declaração: estes são os passos que funcionaram para mim, em pelo menos 3 máquinas diferentes. Não me responsabilize caso não funcione com você, ou se simplesmente seu micro implodir!&lt;br&gt;&lt;br /&gt;Vamos aos passos:&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Baixe o driver do site da NVIDIA (&lt;a href="http://www.nvidia.com/object/linux_display_ia32_180.22.html"&gt;32&lt;/a&gt; ou &lt;a href="http://www.nvidia.com/object/linux_display_amd64_180.22.html"&gt;64&lt;/a&gt; bits)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Vá a um TTY (terminal) com Ctrl+Alt+F1, entre com o seu usuário&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Entre como superusuário: &lt;i&gt;sudo -s&lt;/i&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Dê permissão de execução ao arquivo: &lt;i&gt;chmod +x NVIDIA-Linux-x86_64-180.22-pkg2.run&lt;/i&gt; (este é no meu caso, que é 64 bits)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Instale um pacote necessário: &lt;i&gt;apt-get install build-essential&lt;/i&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Agora pare o modo gráfico: &lt;i&gt;service kdm stop&lt;/i&gt; (se for Kubuntu) ou &lt;i&gt;service gdm stop&lt;/i&gt; (se for Ubuntu)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Remova todos os pacotes relacionados ao driver: &lt;i&gt;apt-get autoremove dkms nvidia*&lt;/i&gt; e execute o &lt;i&gt;nvidia-uninstall&lt;/i&gt; se ele existir&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Remova o módulo do kernel com &lt;i&gt;rmmod nvidia&lt;/i&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Remova o diretório com o driver que veio instalado, ou você terá problemas de compatibilidade com o driver novo: &lt;i&gt;rm -rf /lib/modules/`uname -r`/kernel/drivers/video/nvidia&lt;/i&gt; Execute também &lt;i&gt;rm /lib/modules/dkms/nvidia*&lt;/i&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Agora instale o novo driver, executando o arquivo baixado: &lt;i&gt;./NVIDIA-Linux-x86_64-180.22-pkg2.run&lt;/i&gt; (caso esteja em outro diretório, troque ./ pelo diretório). É um Ok &gt; Ok &gt; Ok... até o fim&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Pronto! Basta reiniciar o ambiente gráfico: &lt;i&gt;service kdm start&lt;/i&gt; (se for Kubuntu) ou &lt;i&gt;service gdm start&lt;/i&gt; (se for Ubuntu)&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;b&gt;Importante:&lt;/b&gt; Se você utilizou este método, guarde o download do driver, pois como não é um pacote oficial, cada vez que você instalar uma atualização do kernel, o modo gráfico vai deixar de subir. Você deve então reinstalar o driver, parando o ambiente gráfico, instalando e depois subindo-o novamente.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2909211050817756519-9164684453488886256?l=luisfpg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://luisfpg.blogspot.com/feeds/9164684453488886256/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2909211050817756519&amp;postID=9164684453488886256' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/9164684453488886256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/9164684453488886256'/><link rel='alternate' type='text/html' href='http://luisfpg.blogspot.com/2009/01/instalando-o-driver-nvidia-18022-no.html' title='Instalando o driver NVIDIA 180.22 no Ubuntu 8.10 (Intrepid Ibex)'/><author><name>Luis Fernando</name><uri>http://www.blogger.com/profile/10369964459649811472</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-6BL3zQMFi84/TofJ6WdnhFI/AAAAAAAAAK8/cfVeC0G43lQ/s220/avatar%2BLuis%2B2.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2909211050817756519.post-2968294609128120408</id><published>2008-12-06T09:58:00.004-02:00</published><updated>2008-12-06T10:41:12.020-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='alsa'/><category scheme='http://www.blogger.com/atom/ns#' term='audio'/><category scheme='http://www.blogger.com/atom/ns#' term='microfone'/><title type='text'>HOWTO: Como fazer funcionar o microfone no Linux</title><content type='html'>Um problema recorrente nos fórums é o uso do microfone. Muitas pessoas tentam usar, por exemplo, o &lt;a href="http://www.skype.com/download/skype/linux/"&gt;skype&lt;/a&gt;, mas o microfone está mudo.&lt;br /&gt;Como solucionar?&lt;br /&gt;Por algum motivo que não entendo até hoje, as distribuições (eu uso o Kubuntu) não vêm com estas configurações por padrão, mas, vamos lá...&lt;br /&gt;Abra um terminal e execute o programa &lt;i&gt;alsamixer&lt;/i&gt;. Você verá uma série de canais de volume. Pressione tab para alternar entre os modos playback, capture e all. No modo capture é que está o problema.&lt;br /&gt;Placas de som diferentes possuem canais diferentes. Vou dar aqui dois exemplos, um do meu computador desktop e outro do laptop.&lt;br /&gt;&lt;b&gt;Desktop&lt;/b&gt;: Possui um chipset VIA. O comando lspci traz a seguinte informação:&lt;br /&gt;&lt;pre&gt;80:01.0 Audio device: VIA Technologies, Inc. VT1708/A [Azalia HDAC] (VIA High Definition Audio Controller) (rev 10)&lt;/pre&gt;&lt;br /&gt;Tive que ativar a captura no canal "Capture" (usando a tecla de espaço) e aumentar o volume do canal "Digital".&lt;br /&gt;&lt;b&gt;Laptop&lt;/b&gt;: Possui um chipset Intel, identificado como:&lt;br /&gt;&lt;pre&gt;00:1b.0 Audio device: Intel Corporation 82801H (ICH8 Family) HD Audio Controller (rev 03)&lt;/pre&gt;&lt;br /&gt;Aqui, foi necessário selecionar como "Input Device" o "Front Mic", que é o microfone embutido. Também aumentei o volume do canal "Capture" e selecioná-lo com a tecla de espaço.&lt;br /&gt;&lt;br&gt;&lt;br /&gt;Em ambos os casos, aumentar o "Mic Boost" ajuda para que o volume não fique baixo demais.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2909211050817756519-2968294609128120408?l=luisfpg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://luisfpg.blogspot.com/feeds/2968294609128120408/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2909211050817756519&amp;postID=2968294609128120408' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/2968294609128120408'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/2968294609128120408'/><link rel='alternate' type='text/html' href='http://luisfpg.blogspot.com/2008/12/howto-como-fazer-funcionar-o-microfone.html' title='HOWTO: Como fazer funcionar o microfone no Linux'/><author><name>Luis Fernando</name><uri>http://www.blogger.com/profile/10369964459649811472</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-6BL3zQMFi84/TofJ6WdnhFI/AAAAAAAAAK8/cfVeC0G43lQ/s220/avatar%2BLuis%2B2.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2909211050817756519.post-4850513274468239857</id><published>2008-11-24T20:16:00.003-02:00</published><updated>2008-11-24T20:26:26.698-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='kde'/><title type='text'>Mais KDE 4.1: Menu de compactar / extrair e plasmoid de início rápido</title><content type='html'>Quem já usou o KDE 4 (especialmente o 4.1), deve ter sentido falta de pelo menos uma coisa essencial no Dolphin (gerenciador de arquivos): ao clicar com a direita em um arquivo compactado, cadê o menu extrair? E ao selecionar arquivos e diretórios, cadê o compactar?&lt;br /&gt;Bem, o fato é que oficialmente só no KDE 4.2. Mas, se você quer essa funcionalidade hoje, tem como!&lt;br /&gt;Adicione o seguinte no seu &lt;span style="font-style:italic;"&gt;/etc/apt/sources.list&lt;/span&gt;:&lt;br /&gt;&lt;pre&gt;deb http://ppa.launchpad.net/samrog131/ubuntu intrepid main&lt;/pre&gt;&lt;br /&gt;Depois, rode os comandos:&lt;br /&gt;&lt;pre&gt;sudo apt-get update&lt;br /&gt;sudo apt-get install servicemenu-extractandcompress&lt;/pre&gt;&lt;br /&gt;Reinicie o Dolphin, e lá estarão os menus!&lt;br /&gt;&lt;br /&gt;Outro elemento que falta para quem estava acostumado com o KDE 3.5 é um applet de início rápido (com vários atalhos em um só lugar). Para tal, após adicionar a linha acima no &lt;span style="font-style:italic;"&gt;/etc/apt/sources.list&lt;/span&gt; e rodar o &lt;span style="font-style:italic;"&gt;sudo apt-get update&lt;/span&gt;, rode:&lt;br /&gt;&lt;pre&gt;sudo apt-get install plasmoid-quicklauncher&lt;/pre&gt;&lt;br /&gt;Depois, ao utilizar o adicionar widgets no painel ou na área de trabalho, você verá o &lt;span style="font-style:italic;"&gt;QuickLauncher&lt;/span&gt;, para onde você pode arrastar os atalhos a partir do editor de menus ou do menu principal.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2909211050817756519-4850513274468239857?l=luisfpg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://luisfpg.blogspot.com/feeds/4850513274468239857/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2909211050817756519&amp;postID=4850513274468239857' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/4850513274468239857'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/4850513274468239857'/><link rel='alternate' type='text/html' href='http://luisfpg.blogspot.com/2008/11/mais-kde-41-menu-de-compactar-extrair-e.html' title='Mais KDE 4.1: Menu de compactar / extrair e plasmoid de início rápido'/><author><name>Luis Fernando</name><uri>http://www.blogger.com/profile/10369964459649811472</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-6BL3zQMFi84/TofJ6WdnhFI/AAAAAAAAAK8/cfVeC0G43lQ/s220/avatar%2BLuis%2B2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2909211050817756519.post-1673371876575049912</id><published>2008-11-19T23:06:00.005-02:00</published><updated>2008-11-29T14:19:26.033-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='kde'/><category scheme='http://www.blogger.com/atom/ns#' term='nvidia'/><title type='text'>Driver NVIDIA e KDE 4.1</title><content type='html'>Quem já usou o KDE 4.1 em um micro com placa NVIDIA (usando o driver proprietário) sabe do que eu estou falando. Quando o cursor pisca em uma aplicação GTK, ao passar o mouse sobre o painel, os botões somem, piscam, mudam as cores...&lt;br /&gt;E isso é um bug no driver da NVIDIA.&lt;br /&gt;Era.&lt;br /&gt;Acontece que foi lançado o driver 180.06 (beta), que pode ser baixado do site da NVIDIA (&lt;a href="http://www.nvidia.com/object/linux_display_ia32_180.06.html"&gt;32&lt;/a&gt; ou &lt;a href="http://www.nvidia.com/object/linux_display_amd64_180.06.html"&gt;64&lt;/a&gt; bits), que corrige esse problema.&lt;br /&gt;Basta baixar, abrir um terminal e executá-lo (chmod +x &lt;arquivo&gt;;./&lt;arquivo&gt;).&lt;br /&gt;Pronto. Aí é só alegria.&lt;br /&gt;Ah, "de lambuja", a performance 2D ficou bem melhor também...&lt;br /&gt;Só vale a pena lembrar que é um driver ainda beta, por isso, pode conter outros bugs... Mas no meu caso valeu (e muito) a pena atualizar.&lt;br /&gt;&lt;br /&gt;[Atualização]&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Atenção:&lt;/span&gt; Se você instalar o driver da NVIDIA manualmente, conforme descrito, sempre que seu kernel for atualizado (como aconteceu recentemente no Intrepid Ibex), o ambiente gráfico (X.org) não vai mais subir, e você terá que reinstalar novamente o driver.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2909211050817756519-1673371876575049912?l=luisfpg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://luisfpg.blogspot.com/feeds/1673371876575049912/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2909211050817756519&amp;postID=1673371876575049912' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/1673371876575049912'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/1673371876575049912'/><link rel='alternate' type='text/html' href='http://luisfpg.blogspot.com/2008/11/driver-nvidia-e-kde-41.html' title='Driver NVIDIA e KDE 4.1'/><author><name>Luis Fernando</name><uri>http://www.blogger.com/profile/10369964459649811472</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-6BL3zQMFi84/TofJ6WdnhFI/AAAAAAAAAK8/cfVeC0G43lQ/s220/avatar%2BLuis%2B2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2909211050817756519.post-6124853057940579091</id><published>2008-09-15T11:16:00.004-03:00</published><updated>2008-09-15T13:07:50.702-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='kde'/><category scheme='http://www.blogger.com/atom/ns#' term='kubuntu'/><title type='text'>KDE 4.1</title><content type='html'>Depois de algum tempo sem postar, uma atualização...&lt;br /&gt;Eu sou um usuário do KDE de longa data.&lt;br /&gt;Quando saiu o KDE 4.0, eu baixei e experimentei, mas ainda estava muito cru.&lt;br /&gt;Em julho saiu o a versão 4.1, e eu não podia deixar de conferir...&lt;br /&gt;No trabalho usamos o Ubuntu 8.04 (eu, particularmente, o Kubuntu). Pois instalei o 4.1.&lt;br /&gt;Pôxa, acho que os caras estão fazendo um trabalho muito bom.&lt;br /&gt;Não notei ele mais pesado que o 3.5, mesmo com muitos recursos a mais...&lt;br /&gt;Ainda faltam algumas coisas, mas com certeza os caras estão no caminho certo.&lt;br /&gt;E este fim de semana instalei o Kubuntu 8.10 (Intrepid Ibex) Alpha 5 em casa.&lt;br /&gt;Como colocado na página, não é recomendado para quem se importa com bugs, pois ainda está em desenvolvimento... Mas o release promete.&lt;br /&gt;Recomendo a todos que quiserem tentar o ambiente Linux, ou aqueles que já o conhecem, que experimentem instalar a versão final do 8.10 (que sai fim de outubro).&lt;br /&gt;Vale muito a pena. O KDE 4.X chegou pra ficar.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2909211050817756519-6124853057940579091?l=luisfpg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://luisfpg.blogspot.com/feeds/6124853057940579091/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2909211050817756519&amp;postID=6124853057940579091' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/6124853057940579091'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/6124853057940579091'/><link rel='alternate' type='text/html' href='http://luisfpg.blogspot.com/2008/09/kde-41.html' title='KDE 4.1'/><author><name>Luis Fernando</name><uri>http://www.blogger.com/profile/10369964459649811472</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-6BL3zQMFi84/TofJ6WdnhFI/AAAAAAAAAK8/cfVeC0G43lQ/s220/avatar%2BLuis%2B2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2909211050817756519.post-2297642914713860019</id><published>2008-03-27T09:55:00.004-03:00</published><updated>2011-01-28T08:39:53.162-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='layout'/><category scheme='http://www.blogger.com/atom/ns#' term='grails'/><title type='text'>Main layout by convention in Grails</title><content type='html'>Grails supports selecting the page layout either using the &lt;span style="font-family: 'courier new';"&gt;&amp;lt;meta name="layout" content="NAME"&amp;gt;&lt;/span&gt; tag or by convention, where the layout is &lt;span style="font-family: 'courier new';"&gt;grails-app/views/layouts/CONTROLLER.gsp&lt;/span&gt; or &lt;span style="font-family: 'courier new';"&gt;grails-app/views/layouts/CONTROLLER/ACTION.gsp&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;I've asked myself several times why doesn't it support the main layout by convention? Maybe because of the partial pages retrieved by Ajax (like the &amp;lt;g:remoteLink&amp;gt; tag). Even on those cases, an heuristic might be applied to determine those cases. Let's go to the actual implementation:&lt;br /&gt;&lt;br /&gt;Create a class called &lt;span style="font-family: 'courier new';"&gt;CustomLayoutDecoratorMapper&lt;/span&gt; on &lt;span style="font-family: 'courier new';"&gt;src/groovy&lt;/span&gt;:&lt;br /&gt;&lt;pre&gt;import javax.servlet.ServletContext&lt;br /&gt;import javax.servlet.http.HttpServletRequest&lt;br /&gt;import org.codehaus.groovy.grails.web.sitemesh.GrailsLayoutDecoratorMapper&lt;br /&gt;import com.opensymphony.module.sitemesh.*&lt;br /&gt;import org.codehaus.groovy.grails.web.servlet.GrailsApplicationAttributes&lt;br /&gt;import org.codehaus.groovy.grails.web.metaclass.ControllerDynamicMethods&lt;br /&gt;&lt;br /&gt;class CustomLayoutDecoratorMapper extends GrailsLayoutDecoratorMapper {&lt;br /&gt;&lt;br /&gt;public Decorator getDecorator(HttpServletRequest request, Page page) {&lt;br /&gt;Decorator decorator = super.getDecorator(request, page)&lt;br /&gt;if (decorator == null) {&lt;br /&gt;decorator = getNamedDecorator(request, "main")&lt;br /&gt;}&lt;br /&gt;return decorator&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Then reference it on &lt;span style="font-family: 'courier new';"&gt;web-app/WEB-INF/sitemesh.xml&lt;/span&gt;, by changing the mapper tag, so that it looks like this: &lt;span style="font-family: 'courier new';"&gt;&amp;lt;mapper class="CustomLayoutDecoratorMapper"&amp;gt;&lt;/span&gt;. &lt;i&gt;Note that when running grails upgrade the file will be reverted to it's original form!&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;Ready! No more need to declare the layout on every page. But, if the layout is declared, it will be honored.&lt;br /&gt;&lt;br /&gt;But what about the Ajax requests? I can think of 2 approaches: The first one is easier for people using the Prototype framework. Just change the line:&lt;br /&gt;&lt;span style="font-family: 'courier new';"&gt;    if (decorator == null) { &lt;/span&gt;&lt;br /&gt;to:&lt;br /&gt;&lt;span style="font-family: 'courier new';"&gt;    if (decorator == null &amp;amp;&amp;amp; request.getHeader("X-Requested-With") != "XMLHttpRequest") {&lt;/span&gt;&lt;br /&gt;Prototype adds the header &lt;span style="font-family: 'courier new';"&gt;X-Requested-With: XMLHttpRequest&lt;/span&gt; for Ajax requests. I don't know whether Dojo does something like that...&lt;br /&gt;&lt;br /&gt;The second option is to declare an empty layout on Ajax pages with &lt;span style="font-family: 'courier new';"&gt;&amp;lt;meta name="layout" content="empty"&amp;gt;&lt;/span&gt;, and create the layout called empty only with the tag &lt;span style="font-family: 'courier new';"&gt;&amp;lt;g:layoutBody&amp;gt;&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Hope this helps!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2909211050817756519-2297642914713860019?l=luisfpg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://luisfpg.blogspot.com/feeds/2297642914713860019/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2909211050817756519&amp;postID=2297642914713860019' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/2297642914713860019'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/2297642914713860019'/><link rel='alternate' type='text/html' href='http://luisfpg.blogspot.com/2008/03/main-layout-by-convention-in-grails.html' title='Main layout by convention in Grails'/><author><name>Luis Fernando</name><uri>http://www.blogger.com/profile/10369964459649811472</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-6BL3zQMFi84/TofJ6WdnhFI/AAAAAAAAAK8/cfVeC0G43lQ/s220/avatar%2BLuis%2B2.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2909211050817756519.post-1567747981603780370</id><published>2008-03-27T09:14:00.004-03:00</published><updated>2008-03-27T10:06:34.790-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='layout'/><category scheme='http://www.blogger.com/atom/ns#' term='grails'/><title type='text'>Layout principal por convenção no Grails</title><content type='html'>O Grails suporta a seleção do layout da página usando usando uma tag , ou por convenção para casos onde o layout é &lt;span style="font-family: courier new;"&gt;grails-app/views/layouts/CONTROLLER.gsp&lt;/span&gt; ou &lt;span style="font-family: courier new;"&gt;grails-app/views/layouts/CONTROLLER/ACTION.gsp&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Mas me perguntei algumas vezes porque ele não suporta um layout principal por convenção? Talvez por causa das requisições por ajax (como o com a tag %lt;g:remoteLink&amp;gt;), que retorna uma página parcial. Mas mesmo assim poderia usar um layout principal usando alguma heurística para esse caso. Vamos à implementação:&lt;br /&gt;&lt;br /&gt;Crie uma classe chamada CustomLayoutDecoratorMapper no src/groovy:&lt;br /&gt;&lt;pre&gt;import javax.servlet.ServletContext&lt;br /&gt;import javax.servlet.http.HttpServletRequest&lt;br /&gt;import org.codehaus.groovy.grails.web.sitemesh.GrailsLayoutDecoratorMapper&lt;br /&gt;import com.opensymphony.module.sitemesh.*&lt;br /&gt;import org.codehaus.groovy.grails.web.servlet.GrailsApplicationAttributes&lt;br /&gt;import org.codehaus.groovy.grails.web.metaclass.ControllerDynamicMethods&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * Decorador de layout para permitir o uso de um layout global&lt;br /&gt; */&lt;br /&gt;class CustomLayoutDecoratorMapper extends GrailsLayoutDecoratorMapper {&lt;br /&gt;&lt;br /&gt;   public Decorator getDecorator(HttpServletRequest request, Page page) {&lt;br /&gt;       Decorator decorator = super.getDecorator(request, page)&lt;br /&gt;       if (decorator == null) {&lt;br /&gt;           decorator = getNamedDecorator(request, "main")&lt;br /&gt;       }&lt;br /&gt;       return decorator&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Depois referencie essa classe no &lt;span style="font-family: courier new;"&gt;web-app/WEB-INF/sitemesh.xml&lt;/span&gt;, alterando a tag mapper para que ela fique assim: &lt;span style="font-family: courier new;"&gt;&amp;lt;mapper class="CustomLayoutDecoratorMapper"&amp;gt;&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Pronto! Não precisa mais declarar o layout em cada página. Mas caso isso seja feito, será respeitado o layout definido.&lt;br /&gt;&lt;br /&gt;Mas e os casos de requisições Ajax? Há duas abordagens. A primeira é mais fácil para quem usa o Prototype: Basta alterar a linha&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    if (decorator == null) { &lt;/span&gt;&lt;br /&gt;para:&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    if (decorator == null &amp;amp;&amp;amp; request.getHeader("X-Requested-With") != "XMLHttpRequest") {&lt;/span&gt;&lt;br /&gt;Isso porque o prototype adiciona o cabeçalho X-Requested-With: XMLHttpRequest para requisições Ajax. Não sei se o Dojo faz algo do tipo...&lt;br /&gt;&lt;br /&gt;A segunda opção é declarar um layout vazio em cada página parcial usar a &lt;span style="font-family: courier new;"&gt;&amp;lt;meta name="layout" content="empty"&amp;gt;&lt;/span&gt;, e criar um arquivo de layout apenas com a tag &lt;span style="font-family: courier new;"&gt;&amp;lt;g:layoutBody&amp;gt;&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Espero que tenha ajudado!&lt;br /&gt;&lt;br /&gt;Esta postagem também está &lt;a href="http://luisfpg.blogspot.com/2008/03/main-layout-by-convention-in-grails.html"&gt;disponível em inglês&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2909211050817756519-1567747981603780370?l=luisfpg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://luisfpg.blogspot.com/feeds/1567747981603780370/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2909211050817756519&amp;postID=1567747981603780370' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/1567747981603780370'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/1567747981603780370'/><link rel='alternate' type='text/html' href='http://luisfpg.blogspot.com/2008/03/layout-principal-por-conveno-no-grails.html' title='Layout principal por convenção no Grails'/><author><name>Luis Fernando</name><uri>http://www.blogger.com/profile/10369964459649811472</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-6BL3zQMFi84/TofJ6WdnhFI/AAAAAAAAAK8/cfVeC0G43lQ/s220/avatar%2BLuis%2B2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2909211050817756519.post-1033247107643985378</id><published>2008-03-03T18:43:00.005-03:00</published><updated>2008-03-03T21:31:54.737-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='grails'/><category scheme='http://www.blogger.com/atom/ns#' term='groovy'/><title type='text'>Linguagens de programação - De programador Java para programador Java</title><content type='html'>Aprendi programação em Visual Basic 3 (eca!), lá por 1995. De lá passei pro ASP (bah) em 2000, pro Java em 2001 e aí estou até hoje.&lt;br /&gt;Mas desde o ano passado, venho estudando linguagens dinâmicas, como o &lt;a href="http://ruby-lang.org/"&gt;Ruby&lt;/a&gt; e o &lt;a href="http://groovy.codehaus.org/"&gt;Groovy.&lt;/a&gt; Já conheço há anos (e acho bem legal) o JavaScript, uma linguagem tão odiada entre os programadores para a web (o que acho uma injustiça). Mas cito Ruby e Groovy porque são linguagens que estão bem faladas hoje em dia, e têm uma infraestrutura bem completa.&lt;br /&gt;Primeiro foi o Ruby. A linguagem é nota 10. É possível fazer coisas do tipo:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;class String&lt;br /&gt; def bold&lt;br /&gt;   "&lt;b&gt;#{self}&lt;/b&gt;"&lt;br /&gt; end&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;Resultado: todas as Strings possuem um método &lt;span style="font-style: italic;"&gt;bold&lt;/span&gt;, e se for invocado "teste".bold retornará &lt;b&gt;teste&lt;/b&gt;. Para horror dos programadores Java mais conservadores, foi reaberta a definição de uma classe existente (e importante como a String), adicionado um método que nem tem um comando &lt;span style="font-style: italic;"&gt;return&lt;/span&gt; e ainda por cima invocado sem usar parênteses!&lt;br /&gt;E o que dizer de código tipo:&lt;br /&gt;&lt;pre&gt;[1, 2, 3].collect {|x| x + 2}&lt;/pre&gt;&lt;br /&gt;O resultado? Um array contendo [3, 4, 5]. Assim também vários outros exemplos interessantes.&lt;br /&gt;O Ruby tem sido muito impulsionado ultimamente pelo framework &lt;a href="http://rubyonrails.org/"&gt;Ruby on Rails&lt;/a&gt;, que mudou drasticamente o conceito de framework web (&lt;a href="http://struts.apache.org/"&gt;Struts&lt;/a&gt;, &lt;a href="http://springframework.org/"&gt;Spring MVC&lt;/a&gt;...).&lt;br /&gt;Apesar de muito interessante, a linguagem é bem distante do Java, e quem investiu pesado em formação e tecnologia Java (quem dirá servidores de aplicação) não vai querer jogar tudo fora...&lt;br /&gt;Claro que existe o &lt;a href="http://jruby.codehaus.org/"&gt;JRuby&lt;/a&gt;, que é uma implementação do Ruby para Java que é muito boa e permite fácil integração com classes Java, mas o "gap" ainda é grande.&lt;br /&gt;Então conheci o Groovy, que tenta ser o mais próximo possível do Ruby, mantendo uma sintaxe bem semelhante à do Java. E tem também o framework &lt;a href="http://grails.org/"&gt;Grails&lt;/a&gt;, que tenta trazer para o Groovy as facilidades do Ruby on Rails.&lt;br /&gt;E o Groovy, junto com o Grails, é a minha aposta para o framework web. Certamente minha escolha para o próximo projeto Java. Ele "nasceu" integrado ao Spring e ao Hibernate, e pode ser instalado (algum termo melhor para &lt;span style="font-style: italic;"&gt;deployed&lt;/span&gt;?) em qualquer servidor web Java.&lt;br /&gt;Vale a pena dar uma olhada.&lt;br /&gt;Claro que muitos ainda resistem à idéia de linguagens dinâmicas, pois se "perde o controle" que a tipagem estática oferece (apesar do Groovy permitir usar tipagem estática) e que "efeitos colaterais" de adicionar métodos dinâmicos em classes. Mas assim foi quando se passou do assembly para o C. Assim foi quando se passou do C para o Java. E assim está sendo para tornar o próprio Java obsoleto. Muito se fala hoje que o Java como linguagem está condenado. Mas a JVM é um ambiente sólido, performático e confiável, e esse sim, vai durar muito tempo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2909211050817756519-1033247107643985378?l=luisfpg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://luisfpg.blogspot.com/feeds/1033247107643985378/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2909211050817756519&amp;postID=1033247107643985378' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/1033247107643985378'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/1033247107643985378'/><link rel='alternate' type='text/html' href='http://luisfpg.blogspot.com/2008/03/linguagens-de-programao-de-programador.html' title='Linguagens de programação - De programador Java para programador Java'/><author><name>Luis Fernando</name><uri>http://www.blogger.com/profile/10369964459649811472</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-6BL3zQMFi84/TofJ6WdnhFI/AAAAAAAAAK8/cfVeC0G43lQ/s220/avatar%2BLuis%2B2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2909211050817756519.post-3727833380091959398</id><published>2008-02-23T17:52:00.003-03:00</published><updated>2008-02-23T18:02:28.552-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='certificação'/><title type='text'>Certificação Java</title><content type='html'>Em dezembro de 2004 fiz a minha primeira certificação Java (SCJP 1.4). Depois o tempo passou, e no ano passado (2007) tinha colocado como meta fazer a de desenvolvedor web. Como deixei para o fim do ano, acabei fazendo o exame no dia 27 de dezembro! Pode? Resultado: fiz até entrevista para o site da &lt;a href="http://sisnema.com.br/"&gt;Sisnema&lt;/a&gt;. Quem quiser conferir, clique &lt;a href="http://sisnema.com.br/Materias/idmat018673.htm"&gt;aqui&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2909211050817756519-3727833380091959398?l=luisfpg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://luisfpg.blogspot.com/feeds/3727833380091959398/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2909211050817756519&amp;postID=3727833380091959398' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/3727833380091959398'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/3727833380091959398'/><link rel='alternate' type='text/html' href='http://luisfpg.blogspot.com/2008/02/certificao-java.html' title='Certificação Java'/><author><name>Luis Fernando</name><uri>http://www.blogger.com/profile/10369964459649811472</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-6BL3zQMFi84/TofJ6WdnhFI/AAAAAAAAAK8/cfVeC0G43lQ/s220/avatar%2BLuis%2B2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2909211050817756519.post-8275408409724377683</id><published>2008-02-23T17:32:00.003-03:00</published><updated>2008-02-23T17:50:33.307-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='javascriptools'/><title type='text'>JavaScripTools</title><content type='html'>Em julho de 2003 publiquei a primeira versão beta do &lt;a href="http://javascriptools.sourceforge.net/"&gt;JavaScripTools&lt;/a&gt;, que é uma biblioteca de funções e componentes &lt;a href="http://pt.wikipedia.org/wiki/JavaScript"&gt;JavaScript&lt;/a&gt;. Inicialmente a idéia era o uso de uma tabela que pudesse ser dinamicamente atualizada. Junto com ela, algumas funções genéricas faziam parte do pacote. Com o passar do tempo, a tabela foi ganhando cada vez mais opções, novas funções foram adicionadas, um conjunto de &lt;a href="http://pt.wikipedia.org/wiki/Parser"&gt;parsers&lt;/a&gt; e máscaras de digitação, para que o usuário possa, por exemplo, digitar números ou datas formatadas, além de máscaras personalizadas.&lt;br /&gt;Quando o JavaScripTools foi publicado, ainda eram bem raras as bibliotecas JavaScript. Hoje existem inúmeros frameworks e opções (alguns dos mais conhecidos são: &lt;a href="http://www.prototypejs.org/"&gt;prototype&lt;/a&gt;, &lt;a href="http://dojotoolkit.org/"&gt;dojo&lt;/a&gt;, &lt;a href="http://extjs.com/"&gt;ext&lt;/a&gt;, &lt;a href="http://developer.yahoo.com/yui"&gt;yui&lt;/a&gt;, ...). Ainda assim, muitos sistemas utilizam o JavaScripTools, especialmente para as máscaras de digitação, que são bastante poderosas e customizáveis, além da tabela dinâmica.&lt;br /&gt;Para quem estiver interessado, pode ver &lt;a href="http://javascriptools.sourceforge.net/samples/index.html"&gt;exemplos do JavaScripTools&lt;/a&gt;, ou baixar o pacote completo na página do &lt;a href="http://sourceforge.net/project/showfiles.php?group_id=87045"&gt;Source Forge&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2909211050817756519-8275408409724377683?l=luisfpg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://luisfpg.blogspot.com/feeds/8275408409724377683/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2909211050817756519&amp;postID=8275408409724377683' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/8275408409724377683'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/8275408409724377683'/><link rel='alternate' type='text/html' href='http://luisfpg.blogspot.com/2008/02/javascriptools.html' title='JavaScripTools'/><author><name>Luis Fernando</name><uri>http://www.blogger.com/profile/10369964459649811472</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-6BL3zQMFi84/TofJ6WdnhFI/AAAAAAAAAK8/cfVeC0G43lQ/s220/avatar%2BLuis%2B2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2909211050817756519.post-1723315660442122408</id><published>2008-02-22T22:46:00.004-03:00</published><updated>2008-02-23T17:51:47.835-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='instrodi'/><category scheme='http://www.blogger.com/atom/ns#' term='cyclos'/><category scheme='http://www.blogger.com/atom/ns#' term='freeit'/><category scheme='http://www.blogger.com/atom/ns#' term='stro'/><title type='text'>Free IT!!!</title><content type='html'>Este ano iniciou junto com uma nova empresa: Free IT.&lt;br /&gt;Ela ainda é um exército de um homem só, mas não se pode subestimar o futuro, principalmente porque Deus está junto nessa!&lt;br /&gt;O principal cliente da Free IT é a organização holandesa  &lt;a href="http://www.strohalm.net/"&gt;STRO&lt;/a&gt;, que tem um escritório em Porto Alegre chamado &lt;a href="http://www.instrodi.org/"&gt;InStroDI&lt;/a&gt;, onde trabalho há quase 3 anos. Desenvolvemos o sistema &lt;a href="http://project.cyclos.org/"&gt;Cyclos&lt;/a&gt;, que é um software bancário para projetos com moedas comunitárias.&lt;br /&gt;Que este ano seja de sucesso aos projetos da STRO e da InStroDI, e de crescimento para Free IT.&lt;br /&gt;Deus abençoe a todos!!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2909211050817756519-1723315660442122408?l=luisfpg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://luisfpg.blogspot.com/feeds/1723315660442122408/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2909211050817756519&amp;postID=1723315660442122408' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/1723315660442122408'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2909211050817756519/posts/default/1723315660442122408'/><link rel='alternate' type='text/html' href='http://luisfpg.blogspot.com/2008/02/free-it.html' title='Free IT!!!'/><author><name>Luis Fernando</name><uri>http://www.blogger.com/profile/10369964459649811472</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-6BL3zQMFi84/TofJ6WdnhFI/AAAAAAAAAK8/cfVeC0G43lQ/s220/avatar%2BLuis%2B2.jpg'/></author><thr:total>0</thr:total></entry></feed>
