Programação e Linux.

sexta-feira, 17 de dezembro de 2010

Remover acentos

Quando se está fazendo uma pesquisa de palavras em um banco de dados é melhor converter todos os caracteres acentuados em seus correspondentes sem acentos. Pesquisei e descobri que não é difícil fazer isto.

Por isso fiz alguns exemplos, um em php usando iconv, em python usando o suporte nativo da linguagem. Acredito que o exemplo usando iconv possa ser usado em C/C++ (man 3 iconv) visto que funciona em linha de comando (man 1 iconv) como mostrado no último exemplo.

(17/12/2010) Há também um exemplo em perl como pedido por Aurélio

Em todos os exemplos eu uso UTF-8.

Exemplo em php:

setlocale(LC_ALL, 'en_US.UTF8');

$string = "Iúri Diniz come açúcar";
echo iconv('UTF-8', 'ASCII//TRANSLIT', $string) . "\n";

Exemplo em python:

import unicodedata

string = "Iúri Diniz come açúcar"

print unicodedata.normalize(
"NFKD", string.decode('utf-8')).encode('ascii', 'ignore')

Exemplo usando linha de comando(bash):

echo "Iúri Diniz come açúcar" | iconv -f "UTF-8" -t "ASCII//TRANSLIT"


Exemplo usando perl:

use Text::Iconv;
$converter = Text::Iconv->new('UTF-8', 'ASCII//TRANSLIT');
print $converter->convert("Iúri Diniz come açúcar")

terça-feira, 24 de agosto de 2010

Alterar diretórios padrão gnome

Com o uso de muitos computadores ao mesmo tempo, meus arquivos ficam espalhados, o que é ruim... Por sorte o Ubuntu possui o serviço Ubuntu One, agora eu coloquei mais ordem, porém fica chato toda vez ter que escolher o diretório "$HOME/Ubuntu One" para salvar minhas coisas.

Isso era um problema até que descobri como alterar os locais padrão do gnome, basta editar o arquivo $HOME/.config/user-dirs.dirs
# This file is written by xdg-user-dirs-update
# If you want to change or add directories, just edit the line you're
# interested in. All local changes will be retained on the next run
# Format is XDG_xxx_DIR="$HOME/yyy", where yyy is a shell-escaped
# homedir-relative path, or XDG_xxx_DIR="/yyy", where /yyy is an
# absolute path. No other format is supported.
#
XDG_DESKTOP_DIR="$HOME/Desktop"
XDG_DOWNLOAD_DIR="$HOME/Desktop"
XDG_TEMPLATES_DIR="$HOME/Modelos"
XDG_PUBLICSHARE_DIR="$HOME/Pública"
XDG_DOCUMENTS_DIR="$HOME/Documentos"
XDG_MUSIC_DIR="$HOME/Músicas"
XDG_PICTURES_DIR="$HOME/Imagens"
XDG_VIDEOS_DIR="$HOME/Vídeos"
Após alterar rode o xdg-user-dirs-update para gravar as alterações

sábado, 24 de julho de 2010

Acessar menu do grub 2 no Ubuntu 10.04 (lucid)

Desde a versão 9.10 (karmic), o Ubuntu deixou de usar o Grub 0.92 (Legacy), passou a usar o Grub 2 e não mais apresenta o menu inicial para escolher qual kernel iniciar (se você tem dual boot, não há problema), como então acessar o menu?

Simples, basta pressionar o SHIFT esquerdo durante a inicialização.

quinta-feira, 22 de julho de 2010

Trac + Subversion + Apache

Aqui vou tentar explicar como instalar o subversion mais o trac rodando em cima do apache no Ubuntu 10.04 (Lucid),

Se o apache, o trac ou subversion não estiverem instalados, faça:
apt-get install subversion #Version: 1.6.6dfsg-2ubuntu1
apt-get install apache2 #Version: 2.2.14-5ubuntu8
apt-get install trac #Version: 0.11.7-1

Preparação inicial
Verifique se tem os módulos necessários no apache
root@mesh-server:~# apache2ctl -M | grep dav
Syntax OK
dav_module (shared)
dav_svn_module (shared)
root@mesh-server:~#
root@mesh-server:~# apache2ctl -M | grep wsgi
Syntax OK
wsgi_module (shared)
root@mesh-server:~#
No ubuntu instale via:
apt-get install libapache2-svn #necessário para o svn
apt-get install libapache2-mod-wsgi #necessário para o trac

Crie um local para os repositórios:
mkdir /var/lib/svn
chown www-data:www-data /var/lib/svn/

Crie um local para os trac's:
mkdir /var/lib/trac
chown www-data:www-data /var/lib/trac/

Crie um local para guardar o script wsgi do trac:
mkdir /var/lib/cgi-bin
chown www-data:www-data /var/lib/cgi-bin

Configurando o Apache
Configure o apache /etc/apache2/sites-available/svn com o seguinte conteúdo
<virtualhost *:80>

ServerAdmin webmaster@localhost
ServerName svn-server.local

DocumentRoot /var/www

<directory />
Options FollowSymLinks
AllowOverride None
</directory>

<directory /var/www>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
deny from all
</directory>

WSGIScriptAlias /trac /var/lib/cgi-bin/trac.wsgi
<directory /var/lib/cgi-bin/trac.wsgi>
WSGIApplicationGroup %{GLOBAL}
Order deny,allow
Allow from all
</directory>

<Location "/trac/[^/]+/login">
AuthType Basic
AuthName "Trac"
AuthUserFile /var/lib/svn/svn-auth-file
Require valid-user
</Location>

ErrorLog /var/log/apache2/svn-server-error.log
LogLevel warn
CustomLog /var/log/apache2/svn-server-access.log combined

<location /svn>
DAV svn
SVNParentPath /var/lib/svn
SVNListParentPath on

Order deny,allow
Allow from all

AuthType Basic
AuthName "Subversion"
AuthUserFile /var/lib/svn/svn-auth-file
Require valid-user
</location>

</virtualhost>

Crie o link para o arquivo de configuração
ln -s /etc/apache2/sites-available/svn /etc/apache2/sites-enabled/001-svn

Veja se tudo está ok:
apache2ctl configtest

Reinicie o apache
apache2ctl restart

Criando o script WSGI para acessar o trac pelo Apache
crie o arquivo /var/lib/cgi-bin/trac.wsgi com o seguinte conteúdo
#!/usr/bin/python
# -*- coding: utf-8 -*-
import trac.web.main
def application(environ, start_response):
environ['trac.env_parent_dir'] = '/var/lib/trac'
return trac.web.main.dispatch_request(environ, start_response)
Coloque as permissões corretas
chown www-data:www-data /var/lib/cgi-bin/trac.wsgi

Administrando os usuários


Adicione o primeiro usuário (ex: iuri) com:
sudo -H -u www-data htpasswd -cm /var/lib/svn/svn-auth-file iuri

Nos próximos (ex: diniz) use::
sudo -H -u www-data htpasswd -m /var/lib/svn/svn-auth-file diniz

Criando os repositórios
Para criar um repositório (ex: wolla), faça:
sudo -H -u www-data svnadmin create /var/lib/svn/wolla

Criado os Trac's
Crie um Trac após criar um repositório subversion (veja acima como).

Para criar o trac (ex: wolla) para o repositório criado no passo anterior (ex: wolla), faça, mas fique atento as perguntas:
sudo -H -u www-data trac-admin /var/lib/trac/wolla/ initenv

Project Name [My Project]> wolla [ENTER]
Database connection string [sqlite:db/trac.db]> [ENTER]
Repository type [svn]> [ENTER]
Path to repository [/path/to/repos]> /var/lib/svn/wolla/ [ENTER]
Agora é preciso configurar pelo menos um usuário ADMIN no trac para poder usar a interface web do trac-admin, para isso faça (ex: usuário iuri em wolla):
trac-admin /var/lib/trac/wolla/ permission add iuri TRAC_ADMIN

Integrando os commits do subversion com o tickets do Trac
Crie (ou modifique) o arquivo post-commit para o repositório subversion (ex: wolla) que deseja integrar ao respectivo Trac (ex: wolla) na pasta hooks do repositório (ex: /var/lib/svn/wolla/hooks/post-commit)
#!/bin/sh
REPOS="$1"
REV="$2"
TRAC_ENV="/var/lib/trac/wolla/"
python /usr/share/doc/trac/contrib/trac-post-commit-hook -p "$TRAC_ENV" -r "$REV"
Aplique as permissões corretas:
chown www-data:www-data /var/lib/svn/wolla/hooks/post-commit
chmod +x /var/lib/svn/wolla/hooks/post-commit

Corrigindo um BUG do syntax
highlighting do Trac

O suporte pygments do trac possui um bug no pacote que vem no Ubuntu 9.10, o link para o jquery.js não foi setado corretamente, para habilitar este suporte basta fazer:
ln -s /usr/share/javascript/jquery/jquery.js /usr/lib/python2.6/dist-packages/trac/htdocs/js

segunda-feira, 12 de julho de 2010

Desabilitar IPv6

A maioria das distribuições Linux vem com IPv6 habilitado e, na maioria das vezes, é desnecessário.

Para desabilitar e aumentar a performance do DNS faça (usando sudo):
echo 'net.ipv6.conf.default.disable_ipv6=1' | sudo tee /etc/sysctl.d/60-disable-ipv6.conf
Reinicie as interfaces de rede (ou reinicie o computador)

O quê? reiniciar o computador é coisa para windows? tá bem, faça então assim:
echo 1 | sudo tee /proc/sys/net/ipv6/conf/`route -n | grep ^0.0.0.0 | awk '{print $8}'`/disable_ipv6

sábado, 26 de junho de 2010

VMWare Workstation e VMWare Player no Ubuntu 9.10

Toda vez que atualizo o Ubuntu a mesma coisa, o VMWare para de funcionar...

Bem, primeiro a instalação, simplesmente ele trava na instalação porque não consegue compilar os módulos no kernel 2.6.32. Para resolver é só pedir para instalar sem os módulos, assim:
export VMWARE_SKIP_MODULES=true
sh ./VMware-Workstation-6.5.4-246459.x86_64.bundle --console


O mesmo vale para o VMWare player, apenas troque o executável.

Resolvida esta etapa agora vamos para a segunda, alterar os fontes para poder compilar, entre no diretório do módulos:
cd /usr/lib/vmware/modules/source/

Crie BACKUPS
mkdir BACKUP
cp vmnet.tar vmci.tar BACKUP/

Agora alteremos o vmnet, descompacte o vmnet.tar
tar xf vmnet.tar

Abra o arquivo vmnet-only/vnetUserListener.c e adicione:
#include "compat_sched.h"

Ficará assim:
--- vnetUserListener.c.orig 2010-06-26 21:29:00.211616293 -0300
+++ vnetUserListener.c 2010-06-26 21:29:13.682020616 -0300
@@ -33,6 +33,7 @@
#include
#include "compat_skbuff.h"
#include "compat_wait.h"
+#include "compat_sched.h"
#include "vnetInt.h"
Compacte-o novamente:
tar cf vmnet.tar vmnet-only/

Apague o diretório vmnet-only:
rm -Rf vmnet-only/

Depois o vmci, descompacte o vmci.tar
tar xf vmci.tar

Abra o arquivo vmci-only/include/pgtbl.h e adicione:
#include "compat_sched.h"

Ficará assim:
--- vmci-only/include/pgtbl.h.orig 2010-06-26 21:33:04.354440359 -0300
+++ vmci-only/include/pgtbl.h 2010-06-26 21:33:23.934592340 -0300
@@ -24,6 +24,7 @@
#include "compat_pgtable.h"
#include "compat_spinlock.h"
#include "compat_page.h"
+#include "compat_sched.h"

#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 3, 11)
# define compat_active_mm mm
Compacte-o novamente:
tar cf vmci.tar vmci-only/

Apague o diretório vmci-only:
rm -Rf vmci-only/

Finalmente vamos compilar os módulos:
vmware-modconfig --console --install-all

Outro problema que pode ocorrer é mouse (ponteiro) ficar maluco no VMWare, perder foco, aparecer dois ponteiros, etc... Para resolver crie ou edite o arquivo /etc/vmware/bootstrap para ter o seguinte conteúdo:
export VMWARE_USE_SHIPPED_GTK="force"