Syntax coloring

quinta-feira, 18 de novembro de 2010

Back to KDE

After the last post, may things have changed...
I've given KDE another try, and... I'm back!!!
They've managed to fix the performance problems I had with 4.5.0.
Whew! I was really missing my favorite desktop environment.
If you had similar problems, give KDE another chance... It's better than ever!

domingo, 15 de agosto de 2010

Switching to GNOME?!?

Things DO change. After years using KDE exclusively, I've now switched to GNOME both at work and at home.
My complaint has always been that GNOME was ugly.
However, the Ayatana guys (which are responsive to the appearance of Ubuntu) are doing a remarkable job.
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.
There was nothing which I had really liked in KDE 4.5, for me, it was only slower!
So I decided to give Ubuntu Lucid a try, and liked it!
So far so good. Let's see how much will I stick with it...

domingo, 16 de maio de 2010

Vídeos do globo.com no Firefox e o AdBlock Plus

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!

quarta-feira, 12 de maio de 2010

JPA 2 Criteria

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.

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?

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 JSR 317 expert group, of course, but everyone I've asked, has the same opinion as me.

Take a look (example extracted from this link, with little changes):
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<Person> criteria = builder.createQuery(
    Person.class);
Root<Person> personRoot = criteria.from(Person.class);
criteria.select(personRoot);
ParameterExpression<String> eyeColorParam = builder.
    parameter(String.class);
criteria.where(builder.equal(personRoot.get(
    Person_.eyeColor), eyeColorParam));
TypedQuery<Person> query = em.createQuery(criteria);
query.setParameter(eyeColorParam, "brown");
List<Person> people = query.getResultList();

Is this example anything close to 'easy'? The very same query in JPQL would be:
String jpql = 
    "select p from Person p where p.eyeColor = :eyeColor";
TypedQuery<Person> query =
    em.createQuery(jpql, Person.class);
query.setParameter("eyeColor", "brown");
List<Person> people = query.getResultList();

To make things a bit worse, the Query object returned from the em.createQuery(criteria) never has parameters already set. And parameters are only used when a ParameterExpression 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...

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?

Thanks God, there is a very nice solution. It's Querydsl. 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 fluent interfaces (code is very readable) and generates queries with bind parameters on all expressions. The Querydsl metamodel has a Q prefix, for example, QEntity, instead of JPA's Entity_. So, let's take a look on the same previous example in Querydsl:
JPAQuery query = new JPAQuery(em);
QPerson person = QPerson.person;
List<Person> people = query.from(person)
  .where(person.eyeColor.eq("brown"))
  .list(person);

Now, that's readable!!! Also, in the project I'm working, I've also extended the query (actually, extending AbstractJPAQuery) and added other useful methods, like page(currentPage, pageSize). Such things can't be done in JPA because all objects (Query, CriteriaQuery, CriteriaBuilder) are interfaces given by the JPA provider, and can't be easily extended.

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 JDO, Lucene, JDBC and even plain collections?

quinta-feira, 8 de abril de 2010

Dica: O que fazer após instalar o Kubuntu Linux

Como recentemente instalei o Kubuntu Lucid Lynx (beta 1) no meu netbook (tive que fazer algumas intervenções para que o hardware funcionasse 100%), resolvi fazer uma compilação de coisas a se fazer após a instalação:
  • 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 (http://cdimages.ubuntu.com/netboot/lucid/) - 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:
    • Conecte um pen drive (TODOS os dados serão removidos).
    • Abra um terminal.
    • Digite dmesg, e veja em qual device ele foi reconhecido (normalmente sdb ou sdc). Às vezes demora alguns segundos até aparecer.
    • Descompacte a imagem: gunzip boot.img.gz
    • 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!
    • 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.
    • É 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, ...
    • 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.
  • Instalar o suporte à tradução para o português: Configurações do Sistema (System Settings), Regional e Linguagem (Regional & 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.
  • Instalação do firefox. O Kubuntu tem um instalador no Programas > Internet. Se quiser usar ele como navegador padrão, nas Configurações do sistema > Aplicativos padrão > Navegador web, selecione o firefox a partir do botão "...". Normalmente, também removo o Konqueror dos favoritos do menu e adiciono o Firefox.
  • Instalação de codecs de vídeos e flash: sudo apt-get install kubuntu-restricted-extras
  • Instalação do plugin java: Requer entrar no KPackageKit, configurações > Editar fontes de software > 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.
    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
  • Instalação da biblioteca para ler DVDs de filmes, caso não seja um netbook: veja as instruções em https://help.ubuntu.com/community/Medibuntu. Basicamente:
  • Trocar o mouse para navegar em pastas com 2 clicks ao invés de 1: Configurações do sistema > Mouse e Teclado > Mouse > Clique duplo para abrir arquivos e pastas.
  • Instalar o Skype: Baixe o skype em http://www.skype.com e instale-o. 
  • 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
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!

    terça-feira, 6 de abril de 2010

    Netbook Philco PHN 10103 e o Linux

    Estes dias comprei um netbook da Philco, modelo PHN 10103, que veio com o Mandriva Linux pré-instalado.
    Uma das primeiras coisas que fiz foi instalar o Kubuntu Lucid (ainda em beta) nele.
    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.

    Webcam de cabeça para baixo:
    Para isto, deve-se instalar uma versão mais nova do pacote libv4l, mais o frontend para configurar:
    sudo add-apt-repository ppa:libv4l
    sudo apt-get update
    sudo apt-get install gtk-v4l libv4l-0

    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:
    #!/bin/bash
    LD_PRELOAD=/usr/lib/libv4l/v4l1compat.so skype

    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.

    Teclas de atalho que não funcionam:
    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.

    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:
    GRUB_CMDLINE_LINUX_DEFAULT="splash quiet acpi.power_nocheck=1"

    Finalmente, rode no terminal: sudo update-grub e reinicie a máquina.

    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:
    sudo apt-get install aosd-cat

    Depois, deve-se modificar o arquivo executado quando o evento de touchpad é detectado. Para isso, rode o seguinte:
    cd /etc/acpi
    sudo mv asus-touchpad.sh asus-touchpad.sh.orig
    sudo nano asus-touchpad.sh

    Então, cole o seguinte conteúdo:
    #!/bin/bash
    [ -f /usr/share/acpi-support/state-funcs ] || exit 0
    . /usr/share/acpi-support/power-funcs
    getXconsole
    DEVICE="AlpsPS/2 ALPS GlidePoint"
    PROPERTY="Device Enabled"
    QUERY=`xinput list-props "$DEVICE" | grep "$PROPERTY"`
    VALUE=${QUERY#*:}
    if [ $VALUE == "1" ]; then
            xinput set-int-prop "AlpsPS/2 ALPS GlidePoint" "Device Enabled" 8 0;
            echo "Touchpad desligado" | aosd_cat -p 7 -u 1000;
    else
            xinput set-int-prop "AlpsPS/2 ALPS GlidePoint" "Device Enabled" 8 1;
            echo "Touchpad ligado" | aosd_cat -p 7 -u 1000;
    fi
    exit 0

    Depois, torne-o executável e adicione o serviço acpid para ser executado ao iniciar a máquina:
    sudo chmod +x asus-touchpad.sh
    sudo update-rc.d acpid defaults
    sudo start acpid

    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.

    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.

    quarta-feira, 27 de janeiro de 2010

    Fim do "distro-hopping"?

    Talvez seja a paternidade, eu não sei.
    Mas cansei da brincadeira de ficar instalando uma nova distribuição do Linux a cada alguns dias / semanas...
    Neste último mês, em especial, já instalei: openSUSE, Kubuntu Lucid Alpha 2, sidux e Arch Linux.
    Pronto, cheguei no meu limite!
    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.
    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...)

    quinta-feira, 7 de janeiro de 2010

    Testando o openSUSE

    Bem, minha já longa lista de distribuições de Linux que testei agora tem mais um nome: openSUSE.
    Na verdade eu já havia usado há bastante tempo o SuSE, mas é a primeira vez que uso o openSuSE.

    Minhas motivações:
    • 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.
    • 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)
    • 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.
    • 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!).
    • 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.
    Instalação:
    • Resolvi instalar apenas no notebook. Meu desktop segue com o sidux.
    • 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.
    • 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 :-)

    Minhas impressões:
    • 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.
    • 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.
    • A integração do Firefox com o KDE é realmente aquilo que eu havia lido... É muito chato ficar usando hacks como este ou este para o Firefox parecer saber que o KDE existe...
    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...