Archive for the ‘Tools’ Category

Why I chose Qt

Thursday, May 13th, 2010

A few months ago, I planned to learn some graphic toolkit. As a GNOME user, GTK was my natural choice. Although I’m a Python lover, I chose C++ because I just wanted to learn a new language and stop being afraid of pointers. So I started to read the gtkmm documentation, like tutorials and API, and to program a simple music player. I was learning gtkmm and it all seemed okay.

But I read a little about Qt and, after talking with some friends about the pros and cons of GTK and Qt, I decided to do with Qt the same things that I’ve already done with GTK up to that point. So I would know what choice was better for me. Notice that I’m not saying that Qt is better for everybody and that GTK must die, but that Qt looked better for me and my personal project. After this disclaimer, and can tell my reasons:

  • Look & feel. I’m a look&feel fanatic, and sometimes I move from GNOME to KDE only to check its new features. But I hate how GTK applications look in KDE. You can use gtk-qt-engine, but you’ll still notice the differences. You can set GTK to use the excellent QtCurve theme, that have identical versions to Qt and GTK, but you’ll get tied to a theme. But look what you have if you run a Qt application in GNOME (gedit is a GTK-based application and Picard is a Qt-based application):

    Thanks to QGtkStyle, Qt applications detect if you are in GNOME and your Qt application gets an almost perfect GTK look & feel. And yeah, it includes open and save dialogs.
  • Documentation. Qt has a very, very rich and well-organised documentation, with tutorials, API references, and examples. gtkmm also have all these items, but they didn’t look very friendly to me. And the documentation of Qt 4.7, still in development, will be even better.
  • A simple, but good IDE. A good programmer must not be dependent on IDEs, but they really help you. I tried to use Anjuta (unstable sometimes), MonoDevelop (very good for .NET platform, but not a good IDE for C/C++ development) and Netbeans as IDE when I was using gtkmm, and I was not satisfied with them. But Qt has its official IDE, Qt Creator:

    Qt Creator is clean, simple, and complete. It has quick access to documentation, breakpoints, project configuration, native support for CVS, Subversion and Git, good code completion, a good GUI designer (like the GTK’s Glade), among other features.
  • Runs well on many platforms. Qt is smart enough to run well – and with native look & feel, I really like this – in Linux, Mac, Windows, and others.

But Qt still has some cons:

  • Users should have it installed to run Qt applications, and this is not very usual in Linux environments based on GNOME, neither on Windows systems.
  • Qt is free only if you’re using it in a free project. For commercial applications, you must obtain a commercial Qt licenceUpdate: this is not exactly a con. You still can use Qt under LGPL in commercial applications, but if you make any change to Qt you must publish them or purchase a commercial Qt licence (thanks, krok, for the comment).

If you’re beginning to learn to program for graphical environments or you’re looking for a good graphical library to use in your project, you really should give Qt a try, implement some examples and feel which option is better for you.


Conectando o PHP ao Oracle

Saturday, April 24th, 2010

Nota: fiz esse tutorial há 3 anos, não garanto que ele continue funcionando!

Depois de muito apanhar, aprendi uma maneira fácil de pôr o PHP pra se comunicar com o Oracle. A maioria das soluções que achei envolvia recompilar o PHP, mudar variáveis de ambiente, scripts de inicialização etc. Uma delas até deu certo, mas mudar as variáveis de ambiente fez o suporte a LDAP do PHP parar de funcionar, por razões que desconheço.

A solução que explico abaixo faz a mesma coisa, mas sem recompilar pacotes ou fazer gambiarras. Deu certo milagrosamente, após juntar a solução proposta por vários sites. O máximo que será feito é compilar a extensão oci8 para o PHP do Debian ou Ubuntu, que é feito automaticamente e em poucos segundos. A parte chata é baixar os arquivos do site do Oracle, que exige criação de conta.

Todos os comandos abaixo são executados como root. Boa sorte! :)

  1. No site de downloads do Oracle para Linux, baixe os arquivos instantclient-basic-linux32-10.2.0.3-20061115.zipinstantclient-sdk-linux32-10.2.0.3-20061115.zip. Você vai precisar criar uma conta no site da Oracle para isso. Após o download, extraia-os para o diretório /usr/local/oracle.
  2. Em /usr/local/oracle, crie o seguinte link: # ln -s libclntsh.so.10.1 libclntsh.so
  3. Instale os pacotes php5-devphp5-pear pelo apt-get ou aptitude (aptitude install php5-dev php5-pear). Caso não exista o php5-pear, procure por php-pear.
  4. Agora execute (lembre-se: sempre como root): # pecl install oci8
  5. Surgirá um prompt perguntando onde estão as bibliotecas do Oracle. Sua resposta será instantclient,/usr/local/oracle , como no exemplo:Please provide the path to ORACLE_HOME dir. Use ”instantclient,/path/to/instant/client/lib” if you”re compiling against Oracle Instant Client [autodetect] : instantclient,/usr/local/oracle
  6. No diretório /etc/php5/conf.d , crie um arquivo oci8.ini, com o seguinte conteúdo:extension=oci8.so
  7. O PHP deverá estar com suporte a Oracle (extensão oci8). Reinicie o seu servidor web (caso seja o Apache, apache2ctl restart).

Fontes: Installing PHP and the Oracle 10g Instant Client for Linux and WindowsHow to: Installing Oracle XE on Ubuntu with PHP

Dicas de ffmpeg

Sunday, April 11th, 2010

Precisei recentemente pegar um vídeo de música, tirar o áudio dele e colocar em outro vídeo. Para o serviço, usei o ffmpeg, o canivete suíço de edição de vídeo em linha de comando.

Os três passos foram:

1. Retirar o áudio do primeiro vídeo

ffmpeg -i danca_do_gorila.flv -ab 128 -ar 44100 gorila.mp3

2. Acrescentar o áudio retirado do primeiro vídeo no outro vídeo

ffmpeg -i video1.mp4 -i gorila.mp3 video_gorila.mp4

3. Selecionar um trecho de um vídeo com 2 minutos, a partir do instante 00:00:02

ffmpeg -i video_gorila.mp4 -ss 00:00:02 -t 00:02:00 video_final.mp4

GNOME 2.30

Friday, April 2nd, 2010

O GNOME 2.30 foi lançado nesse 1º de abril, e os pacotes rapidamente foram disponibilizados pro Arch Linux. :) Assim que atualizei o sistema, aproveitei pra conferir algumas das novidades. A maioria delas, na minha opinião, foram discretas.

Talvez a maior exceção seja o Nautilus, de interface renovada. Agora é possível dividir a visualização em duas, o que facilita muito a troca de arquivos entre dois locais diferentes. O Konqueror faz isso há alguns anos, e era uma funcionalidade que fazia falta no Nautilus.

Dois bugs que me enchiam o saco há algum tempo também parecem ter sido resolvidos. Ao usar dois monitores, alguns applets trocavam de lugar ao iniciar o GNOME e o papel de parede da área de trabalho era esticado entre os dois monitores. Agora o papel de parede é simplesmente replicado para os dois monitores.

Mais detalhes das mudanças na nova versão estão presentes no site do GNOME. Como todo mundo gosta de screenshots, aqui vai um da minha área de trabalho:

Cheat sheets do git

Thursday, March 25th, 2010

Cheat sheets são as melhores amigas de quem precisa fazer tarefas repetitivas no computador mas não quer perder tempo olhando o tempo todo pra guias de consulta rápida. Pra quem gosta do git (mais pessoas deveriam gostar do git…), aqui vão duas cheat sheets ótimas.

A primeira, de apenas uma folha mas bastante útil, está disponível no site do autor da mesmano próprio wiki do git. Ela traz um fluxo de uso do git que pode ser muito útil, que mostra quais passos você efetuar a cada comando do git executado:

A segunda, de duas folhas, também traz um fluxo. Na primeira página traz explicações gerais sobre git e na segunda os comandos que você precisa:

Baixando pacotes pré-compilados no FreeBSD

Wednesday, March 17th, 2010

Após instalar o FreeBSD 8.0 no meu modesto computador para tarefas rotineiras, veio a necessidade de instalar alguns pacotes. O FreeBSD tem duas modalidades de instalação de pacotes:

  • O sistema de ports, que automatiza a tarefa de baixar código-fonte e compilá-lo, além de adaptar alguns pacotes ao seu gosto: o sistema ajuda você a habilitar ou desabilitar opções de vários pacotes, como suporte a Unicode, X11, bibliotecas adicionais etc.
  • Pacotes binários pré-compilados, familiares pra quem vem do Linux (como eu).

O FreeBSD possui uma ferramenta simpática chamada pkg_add que lembra o apt-get, pacman ou yum do Linux, baixando pacotes nos repositórios do FreeBSD. Porém, ao pedir pro pkg_add instalar alguns pacotes, como o Transmission, ele instalou versões mais antigas. Fuçando no FTP do FreeBSD, achei pacotes mais recentes dos pacotes. A próxima briga foi pra fazer o pkg_add usar apenas esses pacotes mais novos (dum diretório amigavelmente chamado Latest).

O truque é simples: quando você executa pkg_add -r nomedopacote, o pkg_add busca por $PACKAGESITE/nomedopacote.tbz. Se você fuçar pelos diretórios dos mirrors do FreeBSD vai perceber que os pacotes normalmente se chamam nomedopacote-versão.tbz, exceto os do diretório Latest, que instalam automaticamente a última versão disponível. Nos comandos abaixo, reparem que usei o sistema para arquitetura 64 bits (amd64), se sua instalação for para x86 32 bits, troque amd64 por i386.

Assim, pra instalar o vim, usei o seguinte comando no bash:

[root@tinhoso /home/esdras]# export PACKAGESITE="ftp://ftp4.freebsd.org/pub/FreeBSD/ports/amd64/packages-8-stable/Latest/"
[root@tinhoso /home/esdras]# pkg_add -r vim

Você pode, ainda, acrescentar o comando do export no seu arquivo ~/.profile, o que fará o comando ser executado automaticamente a cada login:

[root@tinhoso ~]# echo export PACKAGESITE=\"ftp://ftp4.freebsd.org/pub/FreeBSD/ports/amd64/packages-8-stable/Latest/\" >> ~/.profile

Caso você use csh (shell padrão no FreeBSD!), o comando muda:

tinhoso# setenv PACKAGESITE ftp://ftp4.freebsd.org/pub/FreeBSD/ports/amd64/packages-8-stable/Latest/
tinhoso# pkg_add -r nano
Para tornar a variável permanente, acrescente esse comando no arquivo ~/.cshrc:

tinhoso# echo setenv PACKAGESITE ftp://ftp4.freebsd.org/pub/FreeBSD/ports/amd64/packages-8-stable/Latest/ >> ~/.cshrc

Fontes

Assinando RSS no Chrome

Wednesday, March 3rd, 2010

Como usuário do Google Chrome, estava sentindo falta duma maneira para assinar feeds RSS facilmente, como é no Firefox. Felizmente, alguém já fez uma extensão pra isso: com a RSS Subscription Extension, você pode assinar feeds facilmente pelo Chrome, de maneira idêntica ao Firefox:

Acessando a FreeNode com XChat e Tor

Tuesday, March 2nd, 2010

Servidores IRC costumam ser bloqueados em uma boa quantidade de redes. As desculpas para isso são diversas: as pessoas vão perder tempo no bate-papo, podem puxar pirataria em file servers e por aí vai. No entanto, como tudo na internet (até mesmo o orkut), o IRC também pode ser usado para boas finalidades, inclusive finalidades profissionais. Por exemplo, tirar dúvidas de desenvolvimento em canais especializados da rede FreeNode. Mas os firewalls e proxies não sabem das suas intenções…

Para esse feito, utilizei Tor e XChat. Importante: ao conectar, ele requisitou autenticação SASL, o que me fez procurar um script que habilitasse SASL no XChat. Para esse caso, também foi necessário já ter um  nickname registrado na FreeNode.

As instruções:

  1. Primeiro você precisa instalar o Tor na sua distribuição Linux. No meu Arch Linux, um pacman -S tor resolveu. Edite o arquivo /etc/tor/torrc e acrescente a seguinte linha no fim do arquivo:
    mapaddress  10.40.40.40  p4fsi4ockecnea7l.onion
  2. Salve o arquivo e reinicie o serviço. No Arch Linux, isso é feito com
    /etc/rc.d/tor restart

    Na maioria das outras distribuições populares, isso é feito com

    /etc/init.d/tor restart
  3. Você precisará usar esse script para habilitar SASL no XChat.  Ponha-o no diretório ~/.xchat2 .
  4. Inicie o XChat. Vá no menu Settings > Preferences.
  5. Vá em Network > Network Setup.
  6. Defina o proxy para localhost, porta 9050, tipo Socks5.
  7. Feche as configurações. Agora vá em File > Server list e crie uma nova rede. A minha eu chamei de FreeNode_Tor.
  8. Abra as configurações da sua nova rede e adicione o servidor p4fsi4ockecnea7l.onion/6667.
  9. Agora você vai acrescentar suas configurações do SASL:
    /SASL -set FreeNode_Tor <seu nick> <sua senha>
  10. Conecte ao servidor:
    /server 10.40.40.40

Fontes:

Delicious no Chrome

Monday, March 1st, 2010

Até pouco tempo atrás, quem queria usar Delicious no Google tinha que criar botões na barra de bookmarks com gambiarras em JavaScript. Agora temos uma extensão (não-oficial do Delicious) que já nos livra desse serviço.

No momento, ela só faz o que está descrito na figura: adiciona um novo bookmark no Delicious e mostra links para seus bookmarks e inbox do Delicious.

Não há integração dos bookmarks do Delicious com o Chrome, por exemplo. Como nunca gostei de misturar os bookmarks, achei suficiente: simples e funcional.

Transmission

Sunday, February 21st, 2010

Eu estava procurando, esses dias, um bom cliente para baixar torrents.  Queria um programa mais leve: eu estava usando o Vuze, mas para uma tarefa simplória de baixar torrents usar o Vuze é matar mosca com canhão, já que ele tem muito mais recursos do que eu realmente usava. O próprio site do Vuze já o descreve como “o mais poderoso cliente BitTorrent do mundo”, mas eu não precisava de tamanha munição.

Queria um programa que pudesse rodar em background e ser controlado de outro computador, assim eu poderia, por exemplo, pôr um torrent para baixar usando o computador do trabalho e encontrar os arquivos quando chegasse em casa. No meio dessa busca, o Silveira me sugeriu o Transmission, e também me mandou um artigo do Xisberto tratando do programa.

O Transmission pode rodar de várias maneiras: como daemon, assim que o serviço inicia, ou como um programa comum, com interface gráfica (Qt, GTK e Mac). As interfaces são simples, porém funcionais. Abaixo, o screenshot da interface em GTK:

Interface GTK do Transmission

Também há uma interface web que pode controlar o daemon ou o cliente gráfico que você estiver usando. A interface é similar à do cliente gráfico, e baseada no look & feel do Mac:

Interface web do Transmission

O site do Transmission possui uma seção de add-ons que vale a pena consultar. Há várias maneiras alternativas de controlar o Transmission à distância, e um porte do Transmission para Windows a caminho.